
この記事を読んだ後:https://stackoverflow.com/questions/14189944/unix-system-file-tables、私はLinuxがファイルを管理する方法を基本的に理解しています。
しかし、ファイルのオフセットを管理する方法がわかりません。
私が理解したところ、開かれたファイルテーブルの要素(行)は独自のオフセットを保持します。たとえば、2つのプロセスAとBがあり、同じファイルを読み取ります。だから私はこの事件が次のようになるべきだと思います。
Open File Table
____________ ______________
| processA | | offset: 12 | ------\
| fdA | ---------> |------------| \ INode Table
|----------| \______ ___________
/ | file |
____________ ______________ / |---------|
| processB | | offset: 15 | ------/
| fdB | ---------> |------------|
|----------|
したがって、プロセスAにはオープンファイルテーブルに独自のオフセットがあり、プロセスBにも独自のオフセットがあります。上記の場合、プロセスAはオフセット12でファイルを読み込み、プロセスBはオフセット15でファイルを読み取っている。
私が正しいなら、今は混乱しています。
という名前のファイルを開くプロセスがある場合は、myfile
常にファイルに文字列を書き込みます。ある時点で、> myfile
ファイルを空にするコマンドを実行します。私が理解したように、プロセスには独自のオフセットがあり、プロセス> myfile
には別のオフセットがあります。> myfile
独自のオフセットのみが変更されますが、書き込みプロセスが実行後にファイルの先頭に文字列の書き込みを開始するのはなぜですか(オフセットは0です)> myfile
。
要約すると、書き込みプロセスは、実行後にオフセットを変更する必要があることをどのように知ることができますか> myfile
?どのようなオフセット同期メカニズムがありますか?