私の理解はファイル記述子open()
これは、各カーネルプロセスがedファイル、パイプ、ソケット、およびその他のオブジェクトにマップされるキーである整数です。
「open file/socket/pipe/...」(ファイル記述子を参照)には正確で短く、具体的な名前がありますか?
これを「ファイル」と呼ぶと、ファイルシステムに保存されている開かれていないファイルと混同する可能性があります。単にファイル記述子を参照するだけでは、意味を適切に説明することはできません(たとえば、コピー整数プロセス間には役に立たない。)
探すオープングループ基本仕様私のシステムのマンページでは、ファイル記述子の参照オブジェクトが次のように結論付けられました。目的特定のオープンファイルの場合ファイルを開く。これより具体的な用語がありますか?目的?
答え1
これ以上具体的な用語はありません。従来のUnixでは、ファイル記述子を参照ファイルテーブル、呼び出される項目文書または時々ファイルを開く。これは特定の文脈にあるので、明らかに用語は文書文脈上非常に一般的ですファイルテーブル特に開かれたファイルを表します。
ディスク上のファイルはしばしばインデックスノード、技術的にinodeはファイルのメタデータ部分ですが。ただし、インデックスノードとデータブロック間の関係は1対1なので、インデックスノードを参照すると、暗黙的にそのノードが指すデータを参照することになります。より近代的なファイルシステムは、共有可能なデータブロックの書き込み中のコピーなどの機能をサポートできるため、これは普遍的には適用できませんが、既存のUnixでは動作します。しかし、用語を考えるとファイルシステム、内容を考慮するとかなりの飛躍です。文書。
inodeもメモリに読み込まれます。コアインデックスノードディスク上のファイルを開いて保存するとき索引ノード表しかし、これはあなたが要求したよりも高いレベルの間接的です。
これにより、ディスク上のファイル(inodeで参照)と開かれたファイル(ファイルテーブルのエントリで参照)という用語が競合します。
「ファイルを開く」または「ファイルテーブルエントリ」のいずれかが説明する内容を説明するのに十分であることを示唆しています。
私が見つけたかなりきれいな参考資料は次のとおりです。http://www.hicom.net/~shchuang/Unix/unix4.html。参考文献(バッハ優しい)はこの本の参考資料です。Unixオペレーティングシステムの設計著者:モリスJ.バッハ。
答え2
7番目のバージョンのUnixでは、ファイル記述子はユーザー構造のテーブルへのインデックスであり、これは単に開かれたファイルの[システムグローバル]テーブルへのポインタ配列でした。したがって、ファイル記述子自体は実際には間接的な参照、一種の「ポインタへのポインタ」です。また、シングルバイトフラグフィールドの配列にインデックスを付けます(少なくともその時点ではclose-on-execフラグのみが含まれていました)。
struct user {
...
struct file *u_ofile[NOFILE]; /* pointers to file structures of open files */
char u_pofile[NOFILE]; /* per-process flags of open files */
}
オープンファイルテーブル自体には、オープンファイルの読み取り/書き込みモード、inodeへのポインタ、場所、および最新のシステムに関するその他の多くの情報が含まれています。現代のシステムのファイル記述子テーブルにこれ以上の内容が含まれているかどうかはわかりません。
望むより: