私はこれについて混乱しています。
fp = fopen(ファイル名、モード);
fopen() が返した値は何ですか?FP。値はファイル記述子整数ですか?
fpをストリームといいますか?そうでない場合、ストリームを返す方法は?ストリームはいつ作成されますか?
cを使用して開かれたファイルのファイル記述子を返すには?
FILE構造をinodeテーブルと呼びますか?
ベストアンサー1
fopen
データ構造を返すライブラリ関数ですFILE
。 (簡体字)この構造の詳細については、以下にあります。このページ。
この構造のメンバーの 1 つchar
で表されfd
ます。ファイル記述子。プロセスがopen
システムコール(実際に実行fopen
)を使用してファイルを開くたびに、次の内部カーネルテーブルにエントリが作成されます。 (グローバル)ファイルテーブル。
次に、異なるプロセス固有のテーブルに別のエントリを作成します。ユーザーファイル記述子テーブル。この項目は前の項目(カーネル内)を指します。ファイルテーブル)、テーブルの他のエントリと同様にインデックス番号があります。インデックスはプロセスを認識します。ファイル記述子。
- ファイル記述子0は標準入力用に予約されています。
- ファイル記述子1は標準出力用に予約されています。
- ファイル記述子2は標準エラー出力用に予約されています。
したがって、open
プログラムから初めて呼び出すと、ファイル記述子3を取得する可能性が高くなります。すると4、5などになります...
その後、このファイル記述子をファイルに対して実行したいすべての操作(システム呼び出し)のハンドルとして使用できます。、およびread
(write
リリースファイル記述子)詳細については、これらのシステム呼び出しのマニュアルページを参照してください。ライブラリ関数で使用されるシステムコールをマニュアルで見つけるのも一般的です。たとえば、次の内容が表示されます。lseek
close
man fopen
SEE ALSO
open(2) ...
今、これらの概念は小川そしてインデックスノード少し違います。最初はCで純粋に概念的です。データフローはシステムコールを使用して作成することですread
。write
一方、inode 番号はファイルアクセスではなくストレージ管理に関連しています。ファイルシステムでは、各ファイルはファイルシステムのスーパーブロックに格納されたデータ構造に関連付けられます。このデータ構造(inodeと呼ばれる)には、次のファイルに関するさまざまなメタ情報が含まれています。
- 面接時間
- 権限(モード)
- 所有権
- タイプ(一般、ディレクトリ、文字、ブロック、パイプ...)
- ファイルへのリンク(パス)数
- ファイルサイズ
また、inodeを使用すると、カーネルがディスク上のファイルフラグメントの場所を見つけることができます。これについて詳しくは、次をお読みください。UNIXオペレーティングシステムで設計著者:Maurice J.Bach(第4章、セクション1、「インデックスノード」)。また、これに興味がある可能性がありますこれ。