名前付きパイプを作成して読み書きする場合、名前付きパイプを持つファイルシステムは影響を受けますか?つまり、データを読み込む前にファイルシステムにバッファリングしますか、それともメモリにのみ存在しますか?
答え1
ファイルオブジェクト自体はファイルシステムに作成されますが、ファイルシステムにはデータは保存されません。 mkpipe(3) マンページから:
A FIFO special file is similar to a pipe, except that it is created in
a different way. Instead of being an anonymous communications channel,
a FIFO special file is entered into the file system by calling
mkfifo().
データをディスクに保存できる唯一の時間は、メモリがスワップ領域(バッファを含む)に書き込まれる休止状態ですが、これは特別な場合に過ぎません。
答え2
いいえ。名前付きパイプに書き込むと、ファイルシステムは変更されません(アクセス時間を除く)。
以下はデモです:
$ mkdir test
$ mkdir test-ro
$ mkfifo test/fifo
$ mount --bind test test-ro
$ mount -o remount,ro test-ro
$ cat test/fifo & echo something >> test/fifo
something
ご覧のとおり、読み取り専用ファイルシステムにあってもfifoに書き込むことができます。
名前付きパイプはファイルシステムにパイプデータを保存しません。そのデータはファイルシステムバッファとは別にメモリにバッファされます。