.\" Copyright (c) 1980, 1991, 1993, 1994 .\" 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. .\" .\" @(#)close.2 8.2 (Berkeley) 4/19/94 .\" %FreeBSD: src/lib/libc/sys/close.2,v 1.10.2.6 2001/12/14 18:34:00 ru Exp % .\" .\" $FreeBSD$ .Dd April 19, 1994 .Dt CLOSE 2 .Os .Sh 名称 .Nm close .Nd 記述子を削除する .Sh ライブラリ .Lb libc .Sh 書式 .In unistd.h .Ft int .Fn close "int d" .Sh 解説 .Fn close はプロセスのオブジェクト参照テーブルから記述子を削除します。 これがそのオブジェクトへの最後の参照だった場合、 オブジェクトはアクティブでなくなります。たとえば、 ファイルに対する最後のクローズで、そのファイルに結び付けられた現在の .Em seek ポインタは失われます。 .Xr socket 2 に対する最後のクローズで、そのソケットに結び付けられた 命名情報と待ち行列内のデータは破棄されます。 問合せ型ロックを保持している ファイルに対する最後のクローズで、ロックは解放されます (詳細は .Xr flock 2 を参照)。しかし、System V と .St -p1003.1-88 では、あるプロセスがファイルに対して保持しているすべての .Xr fcntl 2 問合せ型レコードロックは、そのファイルについてのファイル記述子の .Em いずれか がそのプロセスによって閉じられるときに削除される、と規定しています。 .Pp プロセスが終了するとき、プロセスに結び付けられた ファイル記述子はすべて解放されます。しかし、 アクティブな記述子の個数にはプロセスごとに制限があるので、 大量のファイル記述子を処理するときは、 .Fn close 関数呼び出しが便利です。 .Pp プロセスがフォークするとき .Pf ( Xr fork 2 参照)、新しい子プロセスの記述子はすべて、 フォークの前に親プロセスの記述子が参照していたのと同じオブジェクトを 参照します。次に、新しいプロセスが .Xr execve 2 で実行される場合、そのプロセスは通常これらの記述子を継承します。 ほとんどの記述子は .Xr execve 2 の前に .Xr dup2 2 で再配置されるか、 .Fn close で削除されます。もし execve が失敗した場合にこれらの記述子が 必要になるのであれば、execve が成功した場合にのみ、 それらをクローズするようにする必要があります。 このために、 .Dq Li fcntl(d, F_SETFD, 1) 呼び出しが準備されています。これは execve が成功した後で、 記述子を閉じるように指示します。 .Dq Li fcntl(d, F_SETFD, 0) 呼び出しはこれをデフォルトに戻します。デフォルトでは、 記述子はクローズされません。 .Sh 戻り値 .Rv -std close .Sh エラー .Fn close は次の場合に失敗します: .Bl -tag -width Er .It Bq Er EBADF .Fa d がアクティブな記述子ではありません。 .It Bq Er EINTR 割り込みが受信されました。 .El .Sh 関連項目 .Xr accept 2 , .Xr execve 2 , .Xr fcntl 2 , .Xr flock 2 , .Xr open 2 , .Xr pipe 2 , .Xr socket 2 , .Xr socketpair 2 .Sh 規格 .Fn close 関数は .St -p1003.1-90 に準拠しています。 .Sh 歴史 .Fn close 関数は .At v7 で登場しました。