OPEN(2) FreeBSD システムコールマニュアル OPEN(2)
名称
open − 読取りまたは書込み用にファイルをオープンする、または作成する |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <fcntl.h> int |
open(const char *path, int flags, ...); |
解説 |
path によって指定されるファイルを、引数 flags によって指定されたように読 取りまたは書込み (またはその両方) 用にオープンし、そのファイル記述子を呼 び出し元プロセスに返します。ファイルが存在しない場合にはファイルを作成す るように、 flags 引数で指示できます (O_CREAT フラグを指定する)。この場 合、 open() には 3 番目の引数 mode_t mode が必要であり、ファイルは chmod(2) で説明されているようにモード mode で作成され、プロセスの umask 値によって修正されます (umask(2) を参照)。 指定されたフラグは次の値の論理和 (or) で作成されます。 |
読取り専用でオープン |
||||
書込み専用でオープン |
||||
読取りと書込み用にオープン |
||||
オープンするときにブロックしない |
||||
書込みのたびに末尾に追加する |
||||
ファイルが存在しない場合、作成する |
||||
サイズを 0 に切り捨てる |
||||
作成するファイルが既に存在した場合、エラーとする |
||||
共有ロックを不可分に取得する |
||||
排他的ロックを不可分に取得する |
||||
キャッシュの効果を無くすまたは減らす |
||||
同期的に書き込む |
||||
シンボリックリンクを辿らない |
O_APPEND を設定してファイルをオープンすると、ファイルへの書込みはすべて ファイルの末尾に追加されます。 O_TRUNC が指定されていてファイルが存在する 場合、ファイルは長さ 0 に切り捨てられます。 O_EXCL が O_CREAT とともに設 定されていてファイルが既に存在する場合、 open() はエラーを返します。これ を使用して、簡単な排他的アクセスロッキングメカニズムを実現できます。 O_EXCL が設定されていてパス名の最後の構成要素がシンボリックリンクの場合、 たとえシンボリックリンクが存在しない名前を指していたとしても open() は処 理に失敗します。 O_NONBLOCK フラグが指定されていて open() システムコール の結果、プロセスが何らかの理由でブロックされると (たとえば、ダイアルアッ プ回線でキャリアを待っている場合)、 open() は即座に戻ります。記述子は、そ の後の操作のために非ブロッキングモードのままにされます。 O_FSYNC がマスクに使用された場合、すべての書込みは直ちにディスクに書き込 まれ、カーネルは書き込まれたデータをキャッシュせず、書き込むべきすべての データが完了するまではこの記述子に対するすべての書込みは戻りません。 O_NOFOLLOW がマスクに使用された場合で open() に渡された対象ファイルがシン ボリックリンクの場合、 open() は失敗します。 ファイルをオープンするときに、 flock(2) を使ったロックを得るには、共有 ロックについては O_SHLOCK 、排他的ロックについては O_EXLOCK を設定しま す。 O_CREAT でファイルを作成する場合、ロック要求が失敗することはありませ ん (ただし、下層にあるファイルシステムがロックをサポートしている場合に限 ります)。 読み書きにおけるキャッシュの効果を最小化もしくは無くすために O_DIRECT を 使用可能です。システムは、読み書きするデータのキャッシングを避けようとし ます。データのキャッシングが避けられない場合、データのキャッシュに対する 影響を最小化します。注意せずに使用すると、本フラグは劇的に性能を劣化させ ます。 正常に完了すると、 open() は、ファイル記述子を示す負でない整数を返しま す。処理に失敗すると -1 を返します。ファイル内の現在の位置をマークする ファイルポインタはファイルの先頭に設定されます。 新しいファイルが作成される場合、そのグループはファイルが含まれるディレク トリのグループに設定されます。 新しい記述子は execve(2) システムコールを通じてオープンされたままであるよ うに設定されます。 close(2) と fcntl(2) を参照してください。 システムには、1 つのプロセスによって同時にオープンできるファイル記述子数 に制限があります。 getdtablesize(2) システムコールは現在のシステム制限を 返します。 |
戻り値
正常に完了すると、 open() はファイル記述子である負でない整数を返します。 処理に失敗すると -1 が返され、エラーを示すために errno が設定されます。 |
エラー
指定のファイルは次の場合を除いてオープンされます: |
[ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれていま す。 [ENAMETOOLONG] [ENOENT] [ENOENT] [EACCES] [EACCES] [EACCES] [ELOOP] [EISDIR] [EROFS] [EMFILE] [ENFILE] [EMLINK] [ENXIO] [ENXIO] [EINTR] [EOPNOTSUPP] [EOPNOTSUPP] [EWOULDBLOCK] [ENOSPC] [ENOSPC] [EDQUOT] [EDQUOT] [EIO] [ETXTBSY] [EFAULT] [EEXIST] [EOPNOTSUPP] [EINVAL] 関連項目 |
chmod(2), close(2), dup(2), getdtablesize(2), lseek(2), read(2), umask(2), write(2), fopen(3) |
歴史
open() 関数は Version 6 AT&T UNIX で登場しました。 FreeBSD 10.0 November 16, 1993 FreeBSD 10.0 |