close

Autres langues

Langue: ja

Autres versions - même langue

Version: 2001-12-13 (fedora - 25/11/07)

Autres sections - même nom

Section: 2 (Appels système)

名前

close - ファイル・ディスクリプターをクローズする

書式

 #include <unistd.h>
 
 int close(int fd);
 

説明

close() はファイル・ディスクリプター (descriptor) をクローズする。 そのディスクリプターは、どのファイルも参照していない状態になり、 再使用が可能になる。 そのファイルディスクリプターに関連づけられたファイルに かけられたレコード・ロック (fcntl(2) 参照) のうち、そのプロセスが保有しているものは、 (そのファイルディスクリプターがロック取得に利用されたか どうかによらず) すべて削除される。

fd がそのファイル・ディスクリプターの最後のコピーだった場合には、 そのディスクリプターに関連したリソースは解放される。 ディスクリプターが unlink を使用して削除 (remove) されたファイルに対する最後の参照だった場合には、 そのファイルは除去 (delete) される。

返り値

close() は成功した場合は 0 を返す。 エラーが発生した場合は -1 を返して、 errno を適切に設定する。

エラー

EBADF
fd が有効なオープンされたディスクリプターでない。
EINTR
close() コールがシグナルにより中断 (interrupt) された。
EIO
I/O エラーが発生した。

準拠

SVr4, 4.3BSD, POSIX.1-2001.

注意

close() の返り値のチェックはよく省略されるが、 これは深刻なプログラミングエラーである。 前の write(2) 処理が最後の close() のときになって初めて通知される場合に、エラーが起きる可能性が高い。 ファイルクローズの際に返り値をチェックしないと、 気付かないうちにデータを失ってしまうかもしれない。 これは特に NFS やディスク・クォータを使用した場合に見られる。

クローズに成功しても、データがディスクに保存されたかどうかは 保証されない (カーネルが書きこみを遅延させることがあるので)。 ストリームがクローズされるときにバッファをフラッシュするかどうかは、 ファイルシステムによって異なる。 データが物理的に保存されることを確かにする必要がある場合には、 fsync(2) を使用すること (この時点ではディスクのハードウェアに依存する)。

関連項目

fcntl(2), fsync(2), open(2), shutdown(2), unlink(2), fclose(3)