パイプ/FIFOのバイトオフセット

パイプ/FIFOのバイトオフセット

パイプ/FIFOのバイトオフセットが通常のファイルのようにファイルテーブルではなくinodeに格納されるのはなぜですか?

私は113ページでこの行を読みました。Unixオペレーティングシステムの設計(1986)バッハ、モリス。

inodeでバイトオフセットを維持すると、FIFOを介してパイプデータに簡単にアクセスでき、オフセットはファイルテーブルに保持されている通常のファイルとは異なります。

答え1

この本は30年前にAT&T Unixシステムの内部を説明していることに注意してください。現代のUnixとUnixシリーズのシステムの作業が同じであると仮定することはできません。

とにかく、パイプが内部的に実装される方法に関係なく、通常のファイルやその他の検索可能なファイルの場合、バイトオフセットはファイル説明を開く(私の考えでは、あなたの本にそのように書かれていると思います。ファイルテーブルエントリ)。つまり、同じファイルを独立して開く2つのプロセスは、それぞれファイルに独自のオフセットを持ちます。あるプロセスからファイルのデータを読み込んでも、他のプロセスのオフセットには影響しません。

パイプの場合、パイプで開かれるすべてのプロセスのすべてのファイル記述子は同じオフセットを共有します。つまり、オフセットはパイプに属します。したがって、開いているすべてのファイル記述にコピーするのではなく、inodeに保存するのが妥当です。

関連情報