【ふぁいるでぃすくりぷた】

ファイルディスクリプタ とは?

最終更新:
💡 開いたものを指定する、プロセスの受付番号

Linux・Unixなどで、プロセスが開いたファイルやソケットなどを参照するための、0以上の整数の番号。同じ番号でも、別のプロセスでは参照先が異なることがある。

📌 このページのポイント
FD:開いたものを番号で指定するあるプロセスのFD参照するもの0:標準入力入力ファイル1:標準出力画面2:標準エラーエラーログ3:開いたファイルdata.txt番号はプロセスごと。閉じた番号は再利用
標準入出力の参照先も設定で変わります。番号と参照先を対応させた一例です。
ひよこ ひよこ
ファイルディスクリプタって何?
ペンギン先生 ペンギン先生
Linuxなら、ファイルをopenすると、成功時に0以上の整数が返るよ。その番号を使ってreadやwriteなどを呼ぶ。例えばFD3で開いたファイルを読む、という指定だね。同じFD3でも別のプロセスでは別のファイルを指すことがあるよ。
ひよこ ひよこ
0・1・2は、いつもキーボードと画面?
ペンギン先生 ペンギン先生
通常は0が標準入力、1が標準出力、2が標準エラー出力に使われるよ。ただし参照先は画面やキーボードに固定されていない。親プロセスやシェルの設定で、ファイルやパイプに向いている場合もあるんだ。
ひよこ ひよこ
番号は、ずっと増えるの?
ペンギン先生 ペンギン先生
閉じた番号は再利用できるよ。Linuxのopenは、そのプロセスで空いている最小の番号を返す。だから番号だけでファイルの種類や開いた順番を永続的に識別しないんだ。使い終わったら閉じることも大切だね。
ひよこ ひよこ
too many open filesが出たら?
ペンギン先生 ペンギン先生
プロセスの上限や、開いたものを閉じ忘れていないかを調べよう。LinuxにはRLIMIT_NOFILEという制限があるけれど、値は環境ごとに違う。一律に65536へ増やすと決めず、実際の使用数、制限、アプリの管理方法を確認するんだ。
ひよこ ひよこ
通信にも、この番号を使うの?
ペンギン先生 ペンギン先生
使うよ。Linuxのsocketも通信の端点を参照するFDを返す。ネットワーク接続とHTTPのリクエストは別の単位なので、リクエスト一件ごとに必ず新しいFDができるとは限らない。ファイルも通信も、開いた資源を参照する番号という共通点があるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ファイルディスクリプタ」って出てきたら「プログラムが開いたファイルなどを指定する番号」と思えばだいたいOK!
📖 おまけ:英語の意味
「File Descriptor」 = ファイル記述子
💬 開いたファイルなどを、そのプロセスから参照するための番号だよ。ファイル名や、全プロセスで共通の番号ではないんだ。

参考資料

← 用語集にもどる