関数仕様
書式
1 2 3 4 5 6 7 |
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open (const char *filepath, int flag); int open (const char *filepath, int flag, mode_t mode); |
引数
filepath | オープンするファイルやデバイスへのパス |
flags | 読み込み、書き込み、その他オプションの指定 |
mode | 新規作成されるファイルのモード(パーミッション) |
戻り値
0以上の値 | ファイル記述子(ファイルやデバイスのオープンに成功) |
-1 | ファイルやデバイスのオープンに失敗 |
フラグ
O_RDONLY | 読み取り専用でオープン |
O_WRONLY | 書き込み専用でオープン |
O_RDWR | 読み書き両用でオープン |
O_CREAT | ファイルが存在しない場合は、新規作成する(引数 mode の指定必要) |
O_EXCL | ファイルが既に存在する場合にはエラーとする(O_CREAT と同時使用時) ※既に存在する場合は、EEXIST のエラー番号がセットされる |
O_TRUNC | ファイルサイズを0に切り詰める(通常ファイルの書き込みオープン時) |
O_APPEND | 追記書き込みモードでオープン |
O_NONBLOCK | ノンブロッキングモードでオープン |
O_NDELAY | O_NONBLOCK と同等 |
O_CLOEXEC | 新しいファイルディスクリプターに対して close-on-exec フラグを有効にする (execした子プロセス側で、ファイルディスクリプターが自動的に閉じられる) |

SANACHAN
機能
- ファイルの読み書きやデバイスの制御を行う場合に必要となるファイル記述子を返す
- ファイル記述子は、その時点でプロセスによって使用されていない最小の値が返る
※以下3つのファイル記述子は、通常、予めオープン済みの状態でプログラムが実行される
0=標準入力、1=標準出力、2=標準エラー出力
関連
ファイル記述子を取得後は、read や write などのシステムコールに引数として指定すると、
ファイルやデバイスの読み書きが行えます。「【C言語】read関数の使い方」も参考にどうぞ。
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #define LOG_FILE_PATH "./test.log" int main(void) { int fd, size; char buf[128]; fd = open(LOG_FILE_PATH, (O_RDONLY | O_CREAT), 0664); if (fd < 0) { return -1; } /* 処理を書く */ close(fd); return 0; } |