20

Unixシステムのファイルテーブルについて混乱しています。

  • 2つ以上のプロセスが読み取り用にファイルを開く場合、システムファイルテーブルはプロセスごとに個別のエントリを作成しますか、それとも単一のエントリを作成しますか?

  • 同じファイルを開く複数のプロセスに対して単一のエントリが作成された場合、それらのファイルオフセットも同じになりますか?

  • 読み取り用にprocess 1開いて同じファイルを書き込み用に開いた場合、システムファイルテーブルは1つまたは2つのエントリを作成しますか?file1.txtprocess 2file1.txt

4

2 に答える 2

46

3つの「システムファイルテーブル」があります。ファイル記述子(小さな整数)を開いているファイルテーブルのエントリにマップするファイル記述子テーブルがあります。開いているファイルテーブルの各エントリには、(とりわけ)ファイルオフセットとメモリ内のiノードテーブルへのポインタが含まれています。写真は次のとおりです:(出典:www.cs.ucsb.eduからの豊富な情報がarchive.orgにあります)ここに画像の説明を入力してください

したがって、開いているファイルのファイルテーブルエントリは1つだけではなく、プロセスごとに1つだけではありません...呼び出しごとに1つあり、ファイル記述子がedまたはedopen()の場合に共有されます。dup()fork()

あなたの質問に答える:

  1. 2つ以上のプロセスが読み取り用にファイルを開くと、開くごとに開いているファイルテーブルにエントリがあります。1つのプロセスがファイルを複数回開く場合は、開くごとにエントリがあります。

  2. 同じファイルを開くさまざまなプロセスの開いているファイルテーブルに単一のエントリは作成されません(ただし、メモリ内のiノードテーブルにはエントリが1つだけあります)。

  3. file1.txtが同じまたは2つの異なるプロセスで2回開かれる場合、2つの異なる開いているファイルテーブルエントリがあります(ただし、メモリ内のiノードテーブルには1つのエントリしかありません)。

于 2013-01-07T04:51:48.900 に答える
-1

ファイル構成とファイルシステムによっては、同じファイルが複数のプロセスによって同時に開かれる場合があり、同じプロセスによっても開かれる場合があります(同じファイルに対して複数のファイル記述子が生成されます)。ファイルポインタの移動やファイルポインタのクローズなどの記述子に対する操作は独立しています(同じファイルの他の記述子には影響しません)。ファイルの操作(書き込みなど)は、他の記述子の操作で確認できます(事後読み取りでは、書き込まれたデータを読み取ることができます)。

これは、 open(システムコール)wikiページからのものです

于 2014-05-15T16:38:20.857 に答える