close サブルーチン

目的

ファイル・ディスクリプターをクローズします。

構文

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

説明

close サブルーチンは、 FileDescriptor パラメーターに関連したファイルまたは共用メモリー・オブジェクトをクローズします。 ネットワーク・ファイル・システム (NFS) がシステムにインストールされている場合は、このファイルを別のノードに置くことができます。

このプロセスが lockf または fcntl サブルーチンによって以前にロックした FileDescriptor パラメーターによって指定されたファイルに関連するすべてのファイル領域は、アンロックされます。 これは、プロセスがまだ別のファイル記述子によってオープンされているファイルを持っている場合でも発生します。

FileDescriptor パラメーターが、 O_DEFERを指定した open サブルーチンの結果であり、これが最後のファイル・ディスクリプターであった場合、最後の fsync サブルーチン以降にファイルに加えられたすべての変更は破棄されます。

FileDescriptor パラメーターは、マップされたファイルに関連付けられている場合、マップ解除されます。 shmat サブルーチンは、マップされたファイルに関する詳細情報を提供します。

close サブルーチンは、このファイル・ディスクリプターに対する未解決の 非同期入出力要求 を取り消そうとします。 非同期入出力要求を取り消すことができない場合、要求が完了するまでアプリケーションはブロックされます。

FileDescriptor パラメーターが共用メモリー・オブジェクトに関連付けられていて、共用メモリー・オブジェクトが最後のクローズで参照されたままの場合 (つまり、プロセスがメモリー・オブジェクトをマップした場合)、メモリー・オブジェクトの内容全体が、メモリー・オブジェクトが参照されなくなるまで存続します。 これが共用メモリー・オブジェクトの最後のクローズであり、クローズの結果としてメモリー・オブジェクトが参照解除され、メモリー・オブジェクトがリンク解除された場合、そのメモリー・オブジェクトは除去されます。 shm_open サブルーチンは、共用メモリー・オブジェクトに関する詳細情報を提供します。

close サブルーチンは、ファイル・ディスクリプターを使用するすべてのサブルーチンが usr スペースに戻るまでブロックされます。 例えば、スレッドが close を呼び出しており、別のスレッドが同じファイル記述子を使用して select を呼び出している場合、 close サブルーチンは、 select 呼び出しが戻るまで戻りません。

パイプまたは FIFO 特殊ファイルに関連したすべてのファイル記述子がクローズされると、パイプまたは FIFO に残っているデータはすべて廃棄されます。 ファイルと関連したすべてのファイル記述子がクローズされた時にファイルのリンク・カウントが 0 の場合には, ファイルが占めていたスペースが解放され, ファイルはアクセス不能になります。

注: FileDescriptor パラメーターがデバイスを参照し、 close サブルーチンが実際にデバイス closeになり、デバイス close ルーチンがエラーを戻した場合、エラーがアプリケーションに戻されます。 ただし、 FileDescriptor パラメーターはクローズと見なされ、後続の呼び出しでは使用できません。

プロセスが終了すると、すべてのオープン・ファイル記述子がクローズされます。 さらに、ファイル・ディスクリプターに対して close-on-exec フラグが設定されている場合は、 exec サブルーチン中にファイル・ディスクリプターをクローズすることができます。

パラメーター

項目 説明
FileDescriptor 有効なオープン・ファイル記述子を指定します。

戻り値

正常終了時には値 0 が返されます。 そうでない場合は-1が返され、errnoグローバル変数にエラーが設定される。

基礎となるファイルシステムのインプリメンテーションは、 /usr/include/errno.h ファイルの値のいずれかを close サブルーチンに報告することがあります。 closeサブルーチンは-11を返し、errnoグローバル変数にはファイルシステムからの戻り値が設定されるが、ファイルは閉じられたままである。 FileDescriptorパラメータの状態は、エラーコードセクションで指定された条件を除き、クローズされる。

エラー・コード

close サブルーチンは、次のような場合には失敗します。

項目 説明
EBADF FileDescriptor パラメーターが、有効なオープン・ファイル記述子を指定していません。

close サブルーチンは、クローズされるファイルが NFSにマウントされていて、サーバーが以下の条件下でダウンしている場合にも、失敗することがあります。

  • ファイルはハード・マウントされています。
  • ファイルは任意の方法でロックされます。

close サブルーチンは、 NFS がインストールされていて、以下の条件が満たされている場合にも失敗することがあります。

項目 説明
ETIMEDOUT 接続がタイムアウトになりました。
close サブルーチンが正常に実行されるかどうかは、以下の条件が真の場合には判別できません。
項目 説明
EINTR FileDescriptor の状態が判別できません。 close ルーチンを再試行して、 FileDescriptor がクローズされていることを確認してください。