CLOSE

Section: System Calls (2)
索引 jman

BSD mandoc
 

索引

名称

close - 記述子を削除する  

索引

ライブラリ

Lb libc  

索引

書式

In unistd.h Ft int Fn close int d  

索引

解説

Fn close システムコールはプロセスのオブジェクト参照テーブルから記述子を削除します。 これがそのオブジェクトへの最後の参照だった場合、 オブジェクトはアクティブでなくなります。 たとえば、ファイルに対する最後のクローズで、そのファイルに結び付けられた現在の seek ポインタは失われます。 socket(2) に対する最後のクローズで、そのソケットに結び付けられた 命名情報と待ち行列内のデータは破棄されます。 問合せ型ロックを保持している ファイルに対する最後のクローズで、ロックは解放されます (詳細は flock(2) を参照)。 しかし、System V と St -p1003.1-88 では、あるプロセスがファイルに対して保持しているすべての fcntl(2) 問合せ型レコードロックは、そのファイルについてのファイル記述子の いずれか がそのプロセスによって閉じられるときに削除される、と規定しています。

プロセスが終了するとき、プロセスに結び付けられた ファイル記述子はすべて解放されます。 しかし、アクティブな記述子の個数にはプロセスごとに制限があるので、 大量のファイル記述子を処理するときは、 Fn close システムコールが便利です。

プロセスがフォークするとき ( fork(2) 参照)、新しい子プロセスの記述子はすべて、 フォークの前に親プロセスの記述子が参照していたのと同じオブジェクトを 参照します。 次に、新しいプロセスが execve(2) で実行される場合、そのプロセスは通常これらの記述子を継承します。 ほとんどの記述子は execve(2) の前に dup2(2) で再配置されるか、 Fn close で削除されます。 もし execve が失敗した場合にこれらの記述子が必要になるのであれば、 execve が成功した場合にのみ、それらをクローズするようにする必要があります。 このために、 ``fcntl(d, F_SETFD, FD_CLOEXEC) '' 呼び出しが準備されています。 これは execve が成功した後で、記述子を閉じるように指示します。 ``fcntl(d, F_SETFD, 0) '' 呼び出しはこれをデフォルトに戻します。 デフォルトでは、記述子はクローズされません。  

索引

戻り値

Rv -std close  

索引

エラー

Fn close システムコールは次の場合に失敗します:

Bq Er EBADF
Fa d 引数がアクティブな記述子ではありません。
Bq Er EINTR
割り込みが受信されました。
Bq Er ENOSPC
下層のオブジェクトとサイズが合わず、キャッシュされたデータが失われました。

 

索引

関連項目

accept(2), execve(2), fcntl(2), flock(2), open(2), pipe(2), socket(2), socketpair(2)  

索引

規格

Fn close システムコールは St -p1003.1-90 に適合しています。  

索引

歴史

Fn close 関数は AT&T System v7 で登場しました。


 

索引

Index

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

jman



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