名前


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)

openSUSE Logo

コンテンツ