私はこれを読んだ郵便はがき。
ファイル記述子はファイルハンドルと同じですか?
Linuxカーネルを設定しようとするとopen by fhandle syscalls (FHANDLE) [Y/n/?]
。
このオプションが提供されるのはなぜですか?カーネルのパフォーマンスやコンパイル時間に影響を与えますか、それともファイルアクセスのための統合された方法を持つことでしょうか?
答え1
ㅏ文書Cの構造体はしばしばと呼ばれfile handle
、これは構造体のいくつかの抽象化です。ファイル記述子:
FILEデータ型は、ファイルまたは指定されたデータストリームに関する情報を含む構造です。これには、ファイル記述子、現在位置、ステータスフラグなどの情報が含まれます。ファイルI / O関数は主に構造体自体ではなくポインタを引数として使用するため、ファイルタイプへのポインタとして最も一般的に使用されます。
便利なカーネルビルド環境はありませんが、オプションを説明するヘルプテキストが必要です。クイック検索に基づいて、次の内容が表示されます。
CONFIG_FHANDLE- fhandleシステムコールを介して開く -
ここでYと言うと、ユーザーレベルのプログラムはファイル名をハンドルにマップし、そのハンドルを他のファイルシステム操作に使用できます。これは、名前の代わりにハンドルを使用してファイルを追跡するユーザー空間ファイルサーバーを実装するのに役立ちます。ファイル名を変更しても、ハンドルは同じままです。 open_by_handle_at(2) および name_to_handle_at(2) システムコールを有効にします。
デフォルトでは、新しい/追加システムコールのサポートを追加します。
答え2
いくつかの情報を見ることができます。ここ。
一般的に言えば、ファイル記述子開いているすべてのファイルの詳細を含むカーネル常駐データ構造内の項目のインデックス。 POSIXでは、このデータ構造を次のように呼び出します。ファイル記述子テーブルには各プロセスに固有の属性があります。ファイル記述子テーブル。ユーザーアプリケーションはシステムコールを介して抽象キーをカーネルに渡し、カーネルはこのキーに基づいてアプリケーションに代わってファイルにアクセスします。アプリケーション自体はファイル記述子テーブルを直接読み書きできません。
Unixシリーズシステムでは、ファイル記述子はファイル、ディレクトリ、ブロックまたは文字デバイス(「特殊ファイル」とも呼ばれる)、ソケット、FIFO(名前付きパイプとも呼ばれる)、または名前のないパイプを参照できます。
C標準I / OライブラリルーチンのFILE *ファイルハンドルは、技術的にこれらのライブラリルーチンによって管理されるデータ構造へのポインタです。これらの構造の1つには、通常、Unixファミリーのシステムシンボル内の問題のオブジェクトの実際の下位レベルのファイル記述が含まれます。ファイルハンドルはこの追加のレイヤーを参照するため、ファイル記述子と交換することはできません。