open()
open()
code:open.c
int open(const char *path, int flags);
int open(const char *path, int flags, mode_t mode);
open() は、第1引数 path のパスで示されるファイルにつながるストリームを作成し、そのストリームを指すファイルディスクリプタを返します。この処理をファイルを開く(open)と言います。
第2引数の flags はストリームの性質を表すフラグで、表5.2と表5.3に示す定数のビットごとの OR (論理和)を指定します。
table:flag1
フラグ 意味
O_RDONLY 読み込み専用
O_WRONLY 書き込み専用
O_RDWR 読み書き両用
書き込み用のストリームを作る場合、 O_WRONLY または O_RDWR を使う場合には以下のフラグをあわせて使うと細かい挙動を指定できます。こちらのフラグは指定しなくても構いませんし、2つ以上を使うこともできます。
table:flag2
ラグ 意味
O_CREAT ファイルが存在しなければ新しいファイルを作る
O_EXCL O_CREAT とともに指定すると、すでにファイルが存在するときはエラーになる
O_TRUNC O_CREAT とともに指定すると、ファイルが存在するときはまずファイルの長さをゼロにする
O_APPEND write() が常にファイル末尾に書き込むように指定する
O_EXCL フラグは、複数のプロセスが同時に同じパスにファイルを作ろうとしている可能性がある状況で有効です。このフラグを指定しておくと、ただ一つのプロセスだけがファイルを作ることができ、残りのプロセスではすべて open() が失敗します。
第3引数の mode は flags に O_CREAT フラグを指定したときだけ有効な引数です。ファイルを新しく作る場合に、そのファイルのパーミッションを指定します。ただし、ここで渡した値がそのまま使われるわけではなく、 umask という値が関わってきます。