ヘッダ | fcntl.h、sys/types.h、sys/stat.h | ||||||||||||||||||||||
書式 | int open(const char *path, int mode, [mode_t creat_mode]) | ||||||||||||||||||||||
引数 | path … ファイル名 mode … オープンするファイルに許可を与えるモード creat_mode … modeにO_CREATを指定した場合に設定できるオープンするファイルのモード(省略可能) modeで設定できる値は、下記「※1」の3つのいずれか1つと、「※2」の任意の値を「|(論理和)」で結んだものとなる。 ※1
※2
modeにO_CREATを指定した場合、3番目の引数で「※3」のcreat_modeを指定できる。 ※3
|
||||||||||||||||||||||
戻り値 | 成功:ファイルデスクリプタ(そのファイルを一意に識別できる数値) 失敗:-1 |
||||||||||||||||||||||
解説 | ファイルをオープンし、ファイルデスクリプタを返却する低水準入出力関数。 |
<サンプルプログラム>
/****************************************************************************/
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define BUF_SIZE 512
int main(void)
{
// 変数定義
int fd1, fd2;
int byte_num;
char buf[BUF_SIZE];
// 変数初期化
fd1 = 0;
fd2 = 0;
byte_num = 0;
memset(buf, ‘\0’, BUF_SIZE);
// ファイルのオープン
fd1 = open(“./file1”, O_RDONLY); // 読み込み専用でファイルを開く
fd2 = open(“./file2”, O_WRONLY); // 書き込み専用でファイルを開く
if(fd1 == -1 || fd2 == -1) // ファイルオープン失敗
{
fprintf(stdout, “ファイルオープンエラー\n”);
return 1;
}
// ファイルから5バイト読み込み
byte_num = read(fd1, &buf[0], 5); // ファイルから5バイト読み込み
if(byte_num == -1) // ファイル読み込み失敗
{
fprintf(stdout, “ファイル読み込みエラー\n”);
return 1;
}
fprintf(stdout, “file1から%dバイト読み込みました。\n”, byte_num);
fprintf(stdout, “読み込んだ文字列:%s\n”, buf);
// ファイルへ3バイト書き込み
byte_num = write(fd2, &buf[0], 3);
if(byte_num == -1) // ファイル書き込み失敗
{
fprintf(stdout, “ファイル書き込みエラー\n”);
return 1;
}
fprintf(stdout, “file2から%dバイト書き込みました。\n”, byte_num);
buf[byte_num] = ‘\0’;
fprintf(stdout, “書き込んだ文字列:%s\n”, buf);
// ファイルを閉じる
close(fd1);
close(fd2);
return 0;
}
/****************************************************************************/
<使用ファイル>
プログラムで使用するfile1.txtの内容(10バイト)
————————–
abcdefghij
————————–
<実行結果>