web-dev-qa-db-ja.com

名前付きパイプはファイルシステムを変更しますか?

名前付きパイプを作成してから読み取り/書き込みを行うと、名前付きパイプが存在するファイルシステムに影響がありますか?つまりデータは読み取られるまでファイルシステムにバッファリングされますか、それともメモリにのみ存在しますか?

7
michelemarcon

ファイルオブジェクト自体はファイルシステムに作成されますが、データはファイルシステムに保存されません。 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().

データがディスクに保存されるのは、バッファを含むメモリがスワップスペースに書き込まれる休止状態の間だけですが、これはまれなケースです。

7
Arcege

いいえ。名前付きパイプへの書き込みは、ファイルシステムを変更しません(アクセス時間を除く)。

これがデモンストレーションです:

$ 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は読み取り専用ファイルシステム上にありましたが、書き込みは可能でした。

名前付きパイプは、パイプされたデータをファイルシステムに保存しません。それらのデータは、ファイルシステムバッファとは別にメモリにバッファリングされます。

5
user26112