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
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 規格
-
- 歴史
-
Time: 07:06:24 GMT, January 12, 2009