FIFO(7)

NAME
fifo - 先进先出的特殊文件, 命名管道

描述
一个先进先出（FIFO）的特殊文件（一个命名管道）类似一个管道，但它是作为文件系统的 一部分来访问的。 可以同时有多个进程打开它进行读写。当进程间通过 FIFO 交换数据时，内核会在其内部传送 所有数据，而不会写入文件系统。即，FIFO 特殊文件在文件系统中没有任何内容； 文件系统中的文件条目只是作为一个参照点而已，使得进程可以用文件系统中的一个名字 对其进行访问。

内核会为至少有一个进程打开了的 FIFO 特殊文件维护单独一个管道对象。 在数据经由 FIFO 传输之前，FIFO 的两端（读和写）必须同时打开。 一般来说，打开 FIFO 的行为会阻塞，直至另一端也被打开。

一个进程可以使用非阻塞模式打开一个 FIFO。这种情况下，即使写端没有打开， 打开读端还是会成功。但是，如果读端没有打开，打开写端会失败，并且得到 一个 ENXIO （设备或地址不存在）。

在 Linux 下，不管是阻塞还是非阻塞模式，打开一个 FIFO 用作同时读写都会成功。 POSIX 对于这种情况未进行定义。这个可以用来在读端不可用的情况下打开写端。 一个进程在同时用同一个 FIFO 的两端来实现自己和自己通信的时候要特别小心， 应避免出现死锁。

注释
当一个进程企图向读端没有打开的 FIFO 写数据的时候，进程会收到一个 SIGPIPE 信号。 FIFO 特殊文件可以用 mkfifo(3) 来创建，并且 ls -l 会对其添加一个特殊标记“p”进行指示。

参见
mkfifo(1), open(2), pipe(2), sigaction(2), signal(2), socketpair(2), mkfifo(3), pipe(7)

跋
本页面原英文版是 Linux man-pages 项目 4.09 版的一部分。 如需了解这个项目的描述、汇报漏洞的相关信息及本页面的最新版本， 请访问 https://www.kernel.org/doc/man-pages/.