290 lines
8.5 KiB
Groff
290 lines
8.5 KiB
Groff
.\" Copyright (c) 1980, 1991, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by the University of
|
|
.\" California, Berkeley and its contributors.
|
|
.\" 4. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" @(#)open.2 8.2 (Berkeley) 11/16/93
|
|
.\"
|
|
.Dd November 16, 1993
|
|
.Dt OPEN 2
|
|
.Os BSD 4
|
|
.Sh 名称
|
|
.Nm open
|
|
.Nd 読取りまたは書込み用にファイルを開くかまたは作成する
|
|
.Sh ライブラリ
|
|
.Lb libc
|
|
.Sh 書式
|
|
.Fd #include <fcntl.h>
|
|
.Ft int
|
|
.Fn open "const char *path" "int flags" "..."
|
|
.Sh 解説
|
|
.Fa path
|
|
によって指定されるファイルは、引数
|
|
.Fa flags
|
|
によって指定されたように読取りまたは書込み (またはその両方) 用に開かれ、
|
|
そのファイル記述子は呼び出し元プロセスに返されます。
|
|
.Fa flags
|
|
引数で、
|
|
.Dv ( O_CREAT
|
|
フラグを指定することによって) ファイルが存在しない場合にファイルを
|
|
作成するように指示できます。
|
|
この場合、
|
|
.Nm
|
|
は 3 番目の引数
|
|
.Fa "mode_t mode"
|
|
が必要であり、ファイルは
|
|
.Xr chmod 2
|
|
で説明されているようにモード
|
|
.Fa mode
|
|
で作成され、プロセスの umask 値によって修正されます
|
|
.Pf ( Xr umask 2
|
|
を参照)。
|
|
.Pp
|
|
指定されたフラグは次の値の論理和
|
|
.\".Em or Ns 'ing
|
|
.Em ( or )
|
|
で作成されます。
|
|
.Pp
|
|
.Bd -literal -offset indent -compact
|
|
O_RDONLY 読取り専用で開く
|
|
O_WRONLY 書込み専用で開く
|
|
O_RDWR 読取りと書込み用に開く
|
|
O_NONBLOCK 開くときにブロックしない
|
|
O_APPEND 書込みのたびに末尾に追加する
|
|
O_CREAT ファイルが存在しない場合、作成する
|
|
O_TRUNC サイズを 0 に切り捨てる
|
|
O_EXCL ファイルを作成し、存在する場合はエラー
|
|
O_SHLOCK 共有ロックを自動的に取得する
|
|
O_EXLOCK 排他的ロックを自動的に取得する
|
|
.Ed
|
|
.Pp
|
|
.Dv O_APPEND
|
|
を設定してファイルを開くと、ファイルへ書込むごとに末尾に追加されます。
|
|
.Dv O_TRUNC
|
|
が指定されていてファイルが存在する場合、ファイルは長さ 0 に
|
|
切り捨てられます。
|
|
.Dv O_EXCL
|
|
が
|
|
.Dv O_CREAT
|
|
とともに設定されていてファイルが既に存在する場合、
|
|
.Fn open
|
|
はエラーを返します。これを使用して、
|
|
簡単な排他的アクセスロッキングメカニズムを
|
|
実現できます。
|
|
.Dv O_EXCL
|
|
が設定されていてパス名の最後の構成要素がシンボリックリンクの場合、
|
|
シンボリックリンクが存在しない名前を指していても
|
|
.Fn open
|
|
は処理に失敗します。
|
|
.Dv O_NONBLOCK
|
|
フラグが指定されていて
|
|
.Fn open
|
|
呼び出しの結果が何らかの理由でプロセスがブロックされると (たとえば、
|
|
ダイアルアップ回線でのキャリアの待機)、
|
|
.Fn open
|
|
は即座に戻ります。プロセスが開いたファイルに
|
|
最初に入出力しようとしたとき、プロセスはブロックします
|
|
(現時点では実装されていません)。
|
|
.Pp
|
|
ファイルを開くときに、共有ロックについては
|
|
.Dv O_SHLOCK 、
|
|
排他的ロックについては
|
|
.Dv O_EXLOCK
|
|
を
|
|
設定することによって
|
|
.Xr flock 2
|
|
によってロックが得られます。
|
|
.Dv O_CREAT
|
|
でファイルを作成する場合、ロックについての要求は処理に失敗すること
|
|
はありません (ただし、下層にあるファイルシステムが
|
|
ロックをサポートしている場合に限ります)。
|
|
.Pp
|
|
正常に完了すると、
|
|
.Fn open
|
|
は、ファイル記述子を示す負でない整数を返します。
|
|
処理に失敗すると -1 を返します。ファイル内の現在の位置をマークする
|
|
ファイルポインタはファイルの先頭に設定されます。
|
|
.Pp
|
|
新しいファイルが作成されるとき、そのファイルにはそれが含まれている
|
|
ディレクトリのグループが与えられます。
|
|
.Pp
|
|
新しい記述子は
|
|
.Xr execve 2
|
|
システムコールを通じて開いたままに設定されます。
|
|
.Xr close 2
|
|
と
|
|
.Xr fcntl 2
|
|
を参照してください。
|
|
.Pp
|
|
システムには、1 つのプロセスによって同時に開けるファイル記述子数に
|
|
制限があります。
|
|
.Xr getdtablesize 2
|
|
は現在のシステム制限を返します。
|
|
.Pp
|
|
.Sh システムの注意事項
|
|
非スレッドライブラリでは、
|
|
.Fn open
|
|
は
|
|
.Va open
|
|
システムコールとして実装されています。
|
|
.Pp
|
|
スレッドライブラリでは、
|
|
.Va open
|
|
システムコールは
|
|
.Fn _thread_sys_open
|
|
にアセンブルされ、
|
|
.Fn open
|
|
は、スレッドの再スケジュールを無効にし
|
|
.Fn _thread_sys_open
|
|
を呼び出す関数として実装されています。
|
|
戻る前に、
|
|
.Fn open
|
|
はスレッドの再スケジュールを有効にします。
|
|
.Sh 戻り値
|
|
正常に完了すると、
|
|
.Fn open
|
|
はファイル記述子である負でない整数を返します。
|
|
処理に失敗すると -1 が返され、エラーを示すために
|
|
.Va errno
|
|
が設定されます。
|
|
.Sh エラー
|
|
指定のファイルは次の場合を除いて開かれます。
|
|
.Bl -tag -width Er
|
|
.It Bq Er ENOTDIR
|
|
パスの構成要素中にディレクトリ以外のものが含まれています。
|
|
.It Bq Er ENAMETOOLONG
|
|
パス名の構成要素が 255 文字を越えているか、
|
|
またはパス名全体が 1023 文字を越えています。
|
|
.It Bq Er ENOENT
|
|
.Dv O_CREAT
|
|
が設定されてなく、指定されたファイルが存在しません。
|
|
.It Bq Er ENOENT
|
|
存在しなければならないパス名の構成要素が存在しません。
|
|
.It Bq Er EACCES
|
|
前置パス名の構成要素について検索許可が拒否されています。
|
|
.It Bq Er EACCES
|
|
要求されたパーミッション (読取りまたは書込み用、または両方) が
|
|
指定のフラグに拒否されています。
|
|
.It Bq Er EACCES
|
|
.Dv O_CREAT
|
|
が指定されていて、ファイルが存在せず、かつファイルを作成する
|
|
ディレクトリに書込み許可がありません。
|
|
.It Bq Er ELOOP
|
|
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
|
|
.It Bq Er EISDIR
|
|
指定のファイルがディレクトリであり、引数が書込み用に開くことを
|
|
指定しています。
|
|
.It Bq Er EROFS
|
|
指定されたファイルは読取り専用ファイルシステム上にあり、
|
|
そのファイルを修正しようとしています。
|
|
.It Bq Er EMFILE
|
|
プロセスは、開いたファイル記述子に関する制限に達しています。
|
|
.It Bq Er ENFILE
|
|
システムファイルテーブルが満杯です。
|
|
.It Bq Er ENXIO
|
|
指定のファイルはキャラクタ型特殊ファイルまたはブロック型特殊
|
|
ファイルであり、この特殊ファイルに対応するデバイスは存在していません。
|
|
.It Bq Er ENXIO
|
|
指定されたファイルは FIFO パイプで、どのプロセスからも
|
|
読取り用にオープンされていないにも関らず、
|
|
書込み用にオープンしようとしました。
|
|
.It Bq Er EINTR
|
|
.Fn open
|
|
操作がシグナルによって割り込みされました。
|
|
.It Bq Er EOPNOTSUPP
|
|
.Dv O_SHLOCK
|
|
または
|
|
.Dv O_EXLOCK
|
|
が指定されましたが、下層となっているファイルシステムは
|
|
ロックをサポートしていません。
|
|
.It Bq Er EWOULDBLOCK
|
|
.Dv O_NONBLOCK
|
|
と、
|
|
.Dv O_SHLOCK
|
|
か
|
|
.Dv O_EXLOCK
|
|
のどちらかが指定されましたが、ファイルはロックされています。
|
|
.It Bq Er ENOSPC
|
|
.Dv O_CREAT
|
|
が指定されていて、ファイルが存在せず、新しいファイル用のエントリを
|
|
配置中のディレクトリは、そのディレクトリを含むファイルシステムに
|
|
空間が残っていないため拡張できません。
|
|
.It Bq Er ENOSPC
|
|
.Dv O_CREAT
|
|
が指定されていて、ファイルが存在せず、かつファイルが作成中の
|
|
ファイルシステム上に未使用の inode がありません。
|
|
.It Bq Er EDQUOT
|
|
.Dv O_CREAT
|
|
が指定されていて、ファイルが存在せず、かつ新しいファイル用の
|
|
エントリを配置中のディレクトリは、そのディレクトリを含む
|
|
ファイルシステム上でディスクブロックの
|
|
ユーザのクォータが枯渇したために拡張できません。
|
|
.It Bq Er EDQUOT
|
|
.Dv O_CREAT
|
|
が指定されていて、ファイルが存在せず、かつファイルを作成中の
|
|
ファイルシステム上で inode のユーザのクォータが枯渇しています。
|
|
.It Bq Er EIO
|
|
ディレクトリエントリを作成中、または
|
|
.Dv O_CREAT
|
|
用の inode を割当て中に入出力エラーが発生しました。
|
|
.It Bq Er ETXTBSY
|
|
ファイルは実行中の純粋な手続き (共有テキスト) ファイルであり、
|
|
.Fn open
|
|
呼び出しは書込みアクセスを要求しています。
|
|
.It Bq Er EFAULT
|
|
.Fa path
|
|
は、プロセスに割り当てられたアドレス空間の範囲外を指しています。
|
|
.It Bq Er EEXIST
|
|
.Dv O_CREAT
|
|
と
|
|
.Dv O_EXCL
|
|
が指定されていて、ファイルが存在します。
|
|
.It Bq Er EOPNOTSUPP
|
|
ソケットを開こうとしました (現時点では実装されていません)。
|
|
.It Bq Er EINVAL
|
|
.Dv O_RDONLY ,
|
|
.Dv O_WRONLY
|
|
および
|
|
.Dv O_RDWR
|
|
の不正な組合わせで記述子を開こうとしました。
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr chmod 2 ,
|
|
.Xr close 2 ,
|
|
.Xr dup 2 ,
|
|
.Xr getdtablesize 2 ,
|
|
.Xr lseek 2 ,
|
|
.Xr read 2 ,
|
|
.Xr umask 2 ,
|
|
.Xr write 2
|
|
.Sh 歴史
|
|
.Fn open
|
|
関数は
|
|
.At v6
|
|
で登場しました。
|