Unixシステムのファイルテーブルについて混乱しています。
2つ以上のプロセスが読み取り用にファイルを開く場合、システムファイルテーブルはプロセスごとに個別のエントリを作成しますか、それとも単一のエントリを作成しますか?
同じファイルを開く複数のプロセスに対して単一のエントリが作成された場合、それらのファイルオフセットも同じになりますか?
process 1
が読み取り用にfile1.txt
を開き、process 2
が書き込み用に同じファイルfile1.txt
を開く場合、システムファイルテーブルは1つまたは2つのエントリを作成しますか?
3つの「システムファイルテーブル」があります。ファイル記述子(小さな整数)を開いているファイルテーブルのエントリにマップするファイル記述子テーブルがあります。開いているファイルテーブルの各エントリには、(とりわけ)ファイルオフセットとメモリ内iノードテーブルへのポインタが含まれています。これが写真です:
(出典: www.cs.ucsb.eduで豊富 )
したがって、開いているファイルのファイルテーブルエントリは1つだけではなく、プロセスごとに1つだけです... open()
呼び出しごとに1つあり、ファイル記述子がdup()
の場合に共有されます。 edまたはfork()
ed。
あなたの質問に答える:
1)2つ以上のプロセスが読み取り用にファイルを開く場合、開くごとに開いているファイルテーブルにエントリがあります。 oneプロセスがファイルを複数回開く場合、開くごとにエントリもあります。
2)同じファイルを開くさまざまなプロセスの開いているファイルテーブルに単一のエントリがnot作成されます(ただし、メモリ内のiノードにはエントリが1つだけあります)テーブル)。
3)file1.txtが同じまたは2つの異なるプロセスで2回開かれる場合、2つの異なる開いているファイルテーブルエントリがあります(ただし、メモリ内のiノードテーブルには1つのエントリしかありません)。
ファイル構成とファイルシステムによっては、同じファイルを複数のプロセスで同時に開くことができ、同じプロセスでも開くことができます(同じファイルに対して複数のファイル記述子が作成されます)。ファイルポインタの移動やファイルポインタのクローズなどの記述子に対する操作は独立しています(同じファイルの他の記述子には影響しません)。ファイルの操作(書き込みなど)は、他の記述子に対する操作で確認できます(事後読み取りでは、書き込まれたデータを読み取ることができます)。
これは open(システムコール)wikiページ からです