Linuxはファイルオフセットをどのように管理しますか?

Linuxはファイルオフセットをどのように管理しますか?

この記事を読んだ後: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?どのようなオフセット同期メカニズムがありますか?

答え1

要約すると、書き込みプロセスは、実行後にオフセットを変更する必要があることをどのように知ることができますか> myfile

しかし、実際にはそうではありません。ファイルオフセットのため変更されません> myfile

後続のファイル操作で発生する状況は、状況によって異なります。readオフセットがファイルの終わりを超えた場合、0 が返されます。writeO_APPEND; でファイルを開くと、ファイルオフセットがファイルの末尾に調整されます。それ以外の場合、ファイルに欠落しているデータが追加されても、要求されたオフセットからの書き込みが発生します。

関連情報