OPEN

Section: System Calls (2)
索引 jman

BSD mandoc
 

索引

名称

open - 読取りまたは書込み用にファイルをオープンする、または作成する  

索引

ライブラリ

Lb libc  

索引

書式

In fcntl.h Ft int Fn open const char *path int flags ...  

索引

解説

Fa path によって指定されるファイルを、引数 Fa flags によって指定されたように読取りまたは書込み (またはその両方) 用にオープンし、 そのファイル記述子を呼び出し元プロセスに返します。 ファイルが存在しない場合にはファイルを作成するように、 Fa flags 引数で指示できます ( O_CREAT フラグを指定する)。 この場合、 Fn open には 3 番目の引数 Fa mode_t mode が必要であり、ファイルは chmod(2) で説明されているようにモード Fa mode で作成され、プロセスの umask 値によって修正されます ( umask(2) を参照)。

指定されたフラグは次の値の論理和 ( or で作成されます。

O_RDONLY        読取り専用でオープン
O_WRONLY        書込み専用でオープン
O_RDWR          読取りと書込み用にオープン
O_NONBLOCK      オープンするときにブロックしない
O_APPEND        書込みのたびに末尾に追加する
O_CREAT         ファイルが存在しない場合、作成する
O_TRUNC         サイズを 0 に切り捨てる
O_EXCL          作成するファイルが既に存在した場合、エラーとする
O_SHLOCK        共有ロックを不可分に取得する
O_EXLOCK        排他的ロックを不可分に取得する
O_DIRECT        キャッシュの効果を無くすまたは減らす
O_FSYNC         同期的に書き込む
O_NOFOLLOW      シンボリックリンクを辿らない

O_APPEND を設定してファイルをオープンすると、 ファイルへの書込みはすべてファイルの末尾に追加されます。 O_TRUNC が指定されていてファイルが存在する場合、ファイルは長さ 0 に切り捨てられます。 O_EXCLO_CREAT とともに設定されていてファイルが既に存在する場合、 Fn open はエラーを返します。 これを使用して、簡単な排他的アクセスロッキングメカニズムを実現できます。 O_EXCL が設定されていてパス名の最後の構成要素がシンボリックリンクの場合、 たとえシンボリックリンクが存在しない名前を指していたとしても Fn open は処理に失敗します。 O_NONBLOCK フラグが指定されていて Fn open システムコールの結果、プロセスが何らかの理由でブロックされると (たとえば、 ダイアルアップ回線でキャリアを待っている場合)、 Fn open は即座に戻ります。 記述子は、その後の操作のために非ブロッキングモードのままにされます。

O_FSYNC がマスクに使用された場合、すべての書込みは直ちにディスクに書き込まれ、 カーネルは書き込まれたデータをキャッシュせず、 書き込むべきすべてのデータが完了するまでは この記述子に対するすべての書込みは戻りません。

O_NOFOLLOW がマスクに使用された場合で Fn open に渡された対象ファイルがシンボリックリンクの場合、 Fn open は失敗します。

ファイルをオープンするときに、 flock(2) を使ったロックを得るには、共有ロックについては O_SHLOCK 、 排他的ロックについては O_EXLOCK を設定します。 O_CREAT でファイルを作成する場合、ロック要求が失敗すること はありません (ただし、下層にあるファイルシステムが ロックをサポートしている場合に限ります)。

読み書きにおけるキャッシュの効果を最小化もしくは無くすために O_DIRECT を使用可能です。 システムは、読み書きするデータのキャッシングを避けようとします。 データのキャッシングが避けられない場合、 データのキャッシュに対する影響を最小化します。 注意せずに使用すると、本フラグは劇的に性能を劣化させます。

正常に完了すると、 Fn open は、ファイル記述子を示す負でない整数を返します。 処理に失敗すると -1 を返します。 ファイル内の現在の位置をマークする ファイルポインタはファイルの先頭に設定されます。

新しいファイルが作成される場合、そのグループは ファイルが含まれるディレクトリのグループに設定されます。

新しい記述子は execve(2) システムコールを通じてオープンされたままであるように設定されます。 close(2) と fcntl(2) を参照してください。

システムには、1 つのプロセスによって同時にオープンできる ファイル記述子数に制限があります。 getdtablesize(2) システムコールは現在のシステム制限を返します。  

索引

戻り値

正常に完了すると、 Fn open はファイル記述子である負でない整数を返します。 処理に失敗すると -1 が返され、エラーを示すために errno が設定されます。  

索引

エラー

指定のファイルは次の場合を除いてオープンされます:

Bq Er ENOTDIR
パスの構成要素中にディレクトリ以外のものが含まれています。
Bq Er ENAMETOOLONG
パス名の構成要素が 255 文字を越えているか、 またはパス名全体が 1023 文字を越えています。
Bq Er ENOENT
指定されたファイルが存在せず、 O_CREAT も設定されていません。
Bq Er ENOENT
存在しなければならないパス名の構成要素が存在しません。
Bq Er EACCES
指定されたパスには、検索が許可されていないディレクトリが含まれています。
Bq Er EACCES
要求されたパーミッション (読取りまたは書込み用、または両方) が 指定のフラグに拒否されています。
Bq Er EACCES
O_CREAT が指定されていて、ファイルが存在せず、かつファイルを作成する ディレクトリに書込み許可がありません。
Bq Er ELOOP
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
Bq Er EISDIR
指定のファイルがディレクトリであり、これを書込み用に オープンするように引数が指定されています。
Bq Er EROFS
指定されたファイルは読取り専用ファイルシステム上にあり、 そのファイルを修正しようとしています。
Bq Er EMFILE
プロセスは、すでにオープンできるファイル記述子に関する制限に達しています。
Bq Er ENFILE
システムファイルテーブルが満杯です。
Bq Er EMLINK
O_NOFOLLOW が指定され、対象がシンボリックリンクです。
Bq Er ENXIO
指定のファイルはキャラクタ型特殊ファイルまたはブロック型特殊ファイルであり、 この特殊ファイルに結び付けられたデバイスは存在していません。
Bq Er ENXIO
指定されたファイルは FIFO パイプで、どのプロセスからも 読取り用にオープンされていないにも関らず、 これを書込み用にオープンしようとしました。
Bq Er EINTR
Fn open 操作がシグナルによって割り込みされました。
Bq Er EOPNOTSUPP
O_SHLOCK または O_EXLOCK が指定されましたが、下層となっているファイルシステムは ロックをサポートしていません。
Bq Er EOPNOTSUPP
指定されたファイルはスペシャルファイルであり、 それにアクセスすることをサポートしていない ファイルシステム (例えば NFS) を通してマウントされています。
Bq Er EWOULDBLOCK
O_NONBLOCK と、 O_SHLOCKO_EXLOCK のどちらかが指定されましたが、ファイルはロックされています。
Bq Er ENOSPC
O_CREAT が指定されていて、ファイルが存在せず、新しいファイル用のエントリを 配置中のディレクトリは、そのディレクトリを含むファイルシステムに 空間が残っていないため拡張できません。
Bq Er ENOSPC
O_CREAT が指定されていて、ファイルが存在せず、かつファイルが作成中の ファイルシステム上に未使用の inode がありません。
Bq Er EDQUOT
O_CREAT が指定されていて、ファイルが存在せず、かつ新しいファイル用の エントリを配置中のディレクトリは、そのディレクトリを含む ファイルシステム上でディスクブロックの ユーザのクォータが枯渇したために拡張できません。
Bq Er EDQUOT
O_CREAT が指定されていて、ファイルが存在せず、かつファイルを作成中の ファイルシステム上で inode のユーザのクォータが枯渇しています。
Bq Er EIO
ディレクトリエントリを作成中、または O_CREAT 用の inode を割り当て中に入出力エラーが発生しました。
Bq Er ETXTBSY
ファイルは純粋な手続き (共有テキスト) ファイルで、 Fn open システムコールが書込みアクセスを要求しましたが、ファイルは実行中です。
Bq Er EFAULT
Fa path 引数は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
Bq Er EEXIST
O_CREATO_EXCL が指定されていて、ファイルが存在します。
Bq Er EOPNOTSUPP
ソケットをオープンしようとしました (現時点では実装されていません)。
Bq Er EINVAL
O_RDONLY O_WRONLY および O_RDWR の不正な組合わせで記述子をオープンしようとしました。

 

索引

関連項目

chmod(2), close(2), dup(2), getdtablesize(2), lseek(2), read(2), umask(2), write(2), fopen(3)  

索引

歴史

Fn open 関数は AT&T System v6 で登場しました。


 

索引

Index

名称
ライブラリ
書式
解説
戻り値
エラー
関連項目
歴史

jman



Time: 07:06:29 GMT, January 12, 2009