据我了解,命名管道不会写入磁盘,而是存储在内存中。这是我创建命名管道的方法 -
$ 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
之后,我重新启动了系统。但是,即使重新启动后,我仍会在当前目录中看到 pipeline21。这是为什么?
答案1
命名管道是文件系统的一部分。任何有文件名的东西都是文件系统的一部分。如果这恰好是持久存储(即磁盘上)中的文件系统,那么它在系统重新启动后仍然存在。
命名管道的文件系统条目只有一个名称、通常的元数据(时间、权限等)和一个表示“这是一个命名管道”的标志。通过管道的数据不会进入文件系统。但命名管道本身位于文件系统中。
答案2
不,它们被写入磁盘。该命令mkfifo pipe21
在您的文件系统上创建相应的设备。通常,这些设备都保存在该目录下,/dev
但命名管道(又名 FIFOS)不一定必须保存在该目录中。
摘自维基百科文章
命名管道可以像任何文件一样被删除:
$ rm my_pipe
例子
建立一个先进先出:
$ 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