CLOSE
Section: Linux Programmer's Manual (2)
Updated: 2013-12-30
Index JM Home Page
名前
close - ファイルディスクリプターをクローズする
書式
#include <unistd.h>
int close(int fd);
説明
close() は、ファイルディスクリプターをクローズする。 そのディスクリプターは、どのファイルも参照していない状態になり、 再利用が可能になる。 そのファイルディスクリプターに関連づけられたファイルに かけられたレコードロック (fcntl(2) 参照) のうち、そのプロセスが保有しているものは、 (そのファイルディスクリプターがロック取得に利用されたか どうかによらず) すべて削除される。
fd が、対応するオープンファイル記述 (open file description) (open(2) 参照) を参照する最後のファイルディスクリプターだった場合、 オープンファイル記述に関連するリソースが解放される。 そのディスクリプターが、 unlink を使用して削除 (remove) されたファイルに対する最後の参照だった場合には、 そのファイルは削除 (delete) される。
返り値
close() は成功した場合は 0 を返す。 エラーが発生した場合は -1 を返して、 errno を適切に設定する。
エラー
- EBADF
- fd が有効なオープンされたディスクリプターでない。
- EINTR
- close() コールがシグナルにより中断 (interrupt) された。 signal(7) 参照。
- EIO
- I/O エラーが発生した。
準拠
SVr4, 4.3BSD, POSIX.1-2001.
注意
close() の返り値のチェックはよく省略されるが、 これは深刻なプログラミングエラーである。 前の write(2) 処理に関するエラーが最後の close() のときになって初めて通知される場合がありうる。 ファイルクローズの際に返り値をチェックしないと、 気付かないうちにデータを失ってしまうかもしれない。 これは特に NFS やディスククォータを使用した場合に見られる。返り値は状態確認用にのみ利用すべき点に注意すること。特に、EINTR 後に close() を再度行うべきではない。なぜなら、これにより、別のスレッドが再利用したディスクリプターをクローズしてしまう可能性があるからだ。
クローズに成功しても、データがディスクに保存されたかどうかは 保証されない (カーネルが書きこみを遅延させることがあるためである)。 ストリームがクローズされるときにバッファーをフラッシュするかどうかは、 ファイルシステムによって異なる。 データが物理的に保存されることを保証する必要がある場合には、 fsync(2) を使用すること (fsync(3) を行った時点で、データの保存はディスクのハードウェアに依存する 問題となる)。
同じプロセス内の他のスレッドのシステムコールが使用している可能性がある間に、 ファイルディスクリプターをクローズするのは、おそらく賢明ではないだろう。 ファイルディスクリプターは再利用されるかもしれないので、 あいまいな競合条件となることがあり、意図しない副作用の原因となりうる。
関連項目
fcntl(2), fsync(2), open(2), shutdown(2), unlink(2), fclose(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
関連キーワード
クローズ,
参照,
エラー,
データ,
ディスクリプター,
利用,
保存,
オープン,
fsync,
最後
Linux マニュアル 一覧
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]
Index
- 名前
- 書式
- 説明
- 返り値
- エラー
- 準拠
- 注意
- 関連項目
- この文書について
This document was created by man2html, using the manual pages.
Time: 12:08:48 GMT, June 11, 2022