web-dev-qa-db-ja.com

システムの再起動後に名前付きパイプが削除されないのはなぜですか?

私の知る限り、名前付きパイプはディスクに書き込まれず、メモリに格納されます。これが名前付きパイプを作成する方法です-

$ mkfifo pipe21
$ grep "simple" SimpleDoc.txt > pipe21 &
[1] 2775
$ cat pipe21
Very simple doc that contains plaintext. 
[1]+  Done                    grep --color=auto "simple" SimpleDoc.txt > pipe21

この後、システムを再起動しました。ただし、再起動した後でも、現在のディレクトリにpipe21が表示されます。何故ですか?

5
CodeBlue

いいえ、ディスクに書き込まれません。コマンド mkfifo pipe21は、ファイルシステム上に対応するデバイスを作成します。多くの場合、これらのデバイスは/devただし、名前付きパイプ(別名FIFO)は、必ずしもこのディレクトリに保持する必要はありません。

ウィキペディアの記事からの抜粋

名前付きパイプは、他のファイルと同じように削除できます。
$ rm my_pipe

FIFOを作成します。

$ pwd
/home/saml

$ mkfifo pipe21

FIFOデバイスを確認してください:

$ ls -l | grep pipe
prw-rw-r--   1 saml saml        0 Jul 24 12:22 pipe21

$ file pipe21 
pipe21: fifo (named pipe)

デバイスを削除します。

$ rm pipe21 

$ ls -l | grep pipe

参考文献

10
slm

名前付きパイプはファイルシステムの一部です。ファイル名を持つものはすべてファイルシステムの一部です。それが永続ストレージ(つまりディスク上)にあるファイルシステムである場合、システムの再起動後も存続します。

名前付きパイプのファイルシステムエントリには、名前、通常のメタデータ(時間、アクセス許可など)、および「これは名前付きパイプです」というフラグがあります。パイプを通過するデータはファイルシステムには行きません。ただし、名前付きパイプ自体はファイルシステムにあります。