fifo(4) - Linux 手册页

名称

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

描述

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

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

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

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

说明

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

FIFO 特殊文件可以通过 mkfifo(3) 创建,并在 ls -l 中特别标示。

参见

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