ファイル記述子![]() ファイル記述子(ファイルきじゅつし、英語: file descriptor)とは、コンピュータプログラミングにおいてファイルへの参照を抽象化したキーである。ファイルディスクリプタ/ファイルデスクリプタ[1][2]あるいはFDとも呼ばれる。UNIX系システムでテキストターミナルを含むファイルストリームを参照する際に用いられる。 MS-DOS[3]やMicrosoft Windowsでは、「ファイルハンドル」がほぼ相当するが、技術的には異なるオブジェクトである。 概要POSIXでは、ファイル記述子は整数型の値であり、詳述すればC言語の
一般にファイル記述子は、オープン中のファイルの詳細を記録するカーネル内データ構造(配列)へのインデックスである。POSIXでは、これをファイル記述子テーブルと呼び、各プロセスが自身のファイル記述子テーブルを持つ。ユーザーアプリケーションは抽象キー(=ファイル記述子)をシステムコール経由でカーネルに渡し、カーネルはそのキーに対応するファイルにアクセスする。アプリケーション自身はファイル記述子テーブルを直接読み書きできない。 UNIX系システムでは、ファイル記述子がファイルだけでなく、ディレクトリ、ブロックデバイスやキャラクターデバイス(スペシャルファイルとも呼ぶ)、ソケット、FIFO(名前付きパイプ)、名前なしパイプなどのカーネルオブジェクトを汎用的に参照するのに使われる。 標準Cライブラリの、 Javaの標準クラスライブラリには、ファイル記述子を表現するハンドルとして MS-DOS・Microsoft WindowsMicrosoft Windowsカーネルでは、ファイル記述子と同様であるが、より汎用的な機構によりファイルオブジェクトを含むさまざまなカーネルオブジェクトを「ハンドル」という抽象的な識別子に関連づける枠組みが採用されている。特にファイルを表すカーネルオブジェクトに関連づけられたハンドルを「ファイルハンドル」と呼ぶが、これはPOSIXにおけるファイル記述子とほぼ同等の役割を担うものと解釈することができる。このファイルハンドルは、前述の(ファイル)ハンドル[どれ?]とは異なるものを指すが、同一の語のため、混乱を生じることがある。MS-DOSではファイル記述子ほぼそのものを指して「ファイルハンドル」と呼んでいた。 マイクロソフトのCランタイムライブラリ (CRT) は、C標準I/Oライブラリとは別に、POSIX互換関数群として、オペレーティングシステムにおけるネイティブのファイルハンドルとPOSIX的な整数のファイル記述子を相互変換して扱える機能を持っている[4][5]。 ファイル記述子に関する操作最近[いつ?]のUNIX系システムが提供するファイル記述子関連の操作(システムコールとライブラリ関数)は以下の通りである。 ファイル記述子の生成
ひとつのファイル記述子に関する操作
複数のファイル記述子に関する操作
ファイル記述子テーブル上の操作
プロセス状態を変更する操作ファイルロック
ソケット
その他
ケイパビリティとしてのファイル記述子UNIXのファイル記述子は、一種のケイパビリティである。sendmsg() システムコールを使うとプロセス間でファイル記述子をやり取りすることができる。つまり、UNIXのプロセスが持つファイル記述子テーブルは「ケイパビリティリスト (C-list)」の実例と見ることもできる。 脚注注釈
出典関連項目 |
Portal di Ensiklopedia Dunia