3つの「システムファイルテーブル」があります。ファイル記述子(小さな整数)を開いているファイルテーブルのエントリにマップするファイル記述子テーブルがあります。開いているファイルテーブルの各エントリには、(とりわけ)ファイルオフセットとメモリ内のiノードテーブルへのポインタが含まれています。写真は次のとおりです:(出典:www.cs.ucsb.eduからの豊富な情報がarchive.orgにあります)
したがって、開いているファイルのファイルテーブルエントリは1つだけではなく、プロセスごとに1つだけではありません...呼び出しごとに1つあり、ファイル記述子がedまたはedopen()
の場合に共有されます。dup()
fork()
あなたの質問に答える:
2つ以上のプロセスが読み取り用にファイルを開くと、開くごとに開いているファイルテーブルにエントリがあります。1つのプロセスがファイルを複数回開く場合は、開くごとにエントリがあります。
同じファイルを開くさまざまなプロセスの開いているファイルテーブルに単一のエントリは作成されません(ただし、メモリ内のiノードテーブルにはエントリが1つだけあります)。
file1.txtが同じまたは2つの異なるプロセスで2回開かれる場合、2つの異なる開いているファイルテーブルエントリがあります(ただし、メモリ内のiノードテーブルには1つのエントリしかありません)。