命名管道会修改文件系统吗?

命名管道会修改文件系统吗?

如果我创建一个命名管道然后对其进行读/写,命名管道所在的文件系统是否会受到影响?即,数据在读取之前缓冲在文件系统上,还是仅驻留在内存中?

答案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 位于只读文件系统上,我们也能够对其进行写入。

命名管道不在文件系统上存储任何管道数据。它们的数据缓冲在内存中,与文件系统缓冲区分开。

相关内容