fifo(7) - Linux 手册页

名称

fifo - 先入先出特殊文件,命名管道

描述

FIFO 特殊文件(命名管道)类似于管道,但它作为文件系统的一部分被访问。多个进程可以打开它进行读或写操作。当进程通过 FIFO 交换数据时,内核会在内部传递所有数据,而不会将其写入文件系统。因此,FIFO 特殊文件在文件系统上没有内容;文件系统条目仅仅作为参考点,以便进程可以使用文件系统中的名称访问管道。

内核为每个被至少一个进程打开的 FIFO 特殊文件维护恰好一个管道对象。在数据可以传递之前,FIFO 必须在两端(读和写)都打开。通常,打开 FIFO 会阻塞,直到另一端也被打开。

进程可以以非阻塞模式打开 FIFO。在这种情况下,仅以只读方式打开即使在另一端尚未打开的情况下也会成功,仅以只写方式打开除非另一端已经打开,否则将失败并显示 ENXIO(不存在设备或地址)。

在 Linux 下,以阻塞和非阻塞模式打开 FIFO 进行读写都会成功。POSIX 将这种行为未定义。这可用于在没有可用读取器的情况下打开 FIFO 进行写入。使用连接两端与自身通信的进程应非常小心,以免发生死锁。

说明

当进程尝试写入另一端未打开用于读取的 FIFO 时,进程会收到 SIGPIPE 信号。

FIFO 特殊文件可以通过 mkfifo(3) 创建,并且在 ls -l 中以文件类型 aqpaq 指示。

参见

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

引用自

signal(7)