ファイルディスクリプタ 【file descriptor】 ファイル記述子
概要
ファイルディスクリプタ(file descriptor)とは、プログラムからファイルを操作する際、操作対象のファイルを識別・同定するために割り当てられる番号。オペレーティングシステム(OS)にファイルの操作を依頼する際に用いられる値で、通常は16ビットの符号なし整数が用いられる。ファイルシステムはOSが管理しているため、プログラムからファイルの読み書きをするにはOSの中核部分であるカーネルに処理を依頼する形を取る。その際に用いられるファイルの識別番号をファイルディスクリプタという。主にUNIX系OSで用いられる仕組みで、Windowsでは「ファイルハンドル」(file handle)がほぼこれに相当する仕組みを提供する。
プログラムが特定のファイルを指定して「開く」操作を行うと、カーネル内の「ファイルテーブル」と呼ばれる領域に対応する項目が作成され、対象ファイルのストレージ上での位置(パス)、ファイル内の現在の操作位置などの情報が記録される。
このテーブル内での当該ファイルの識別番号がファイルディスクリプタで、以降はプログラムからファイルディスクリプタを指定して、どのファイルへの操作なのかをカーネルに伝達する。処理が終わりプログラム上でファイルを「閉じる」操作を行うと、テーブル内の項目は抹消され、対応するファイルディスクリプタも未使用の状態に戻る。
通常、ファイルディスクリプタは0から順番に未使用の最も小さい値が与えられるようになっており、プログラム上では整数型の変数などとして扱われる。ただし、番号によっては固定的に特殊な対象を表す場合があり、一般的には「0」は標準入力(stdin)、「1」は標準出力(stdout)、「2」は標準エラー出力(stderr)としてプログラムの実行中は常に開いた状態になっている。
ファイルディスクリプタには上限値があり、これを超える数のファイルを同時に開くことはできない。上限値はプロセスごとの値とOS全体の値が決まっており、システムや設定によって具体的な値は異なる。Linuxなど多くのシステムでは初期値がプロセスごとの上限が1024に設定されていることが多い。16ビットの整数値が表現できる上限である65535を超える値を指定することはできない。