close - システムコールの説明 - Linux コマンド集 一覧表
名前
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) を使用すること (この時点ではディスクのハードウェアに依存する)。