Scroll to navigation

FIFO(7) Linux Programmer's Manual 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/.
本頁面中文版由中文 man 手冊頁計劃提供。

翻譯人員:Boyuan Yang <073plan@gmail.com>
獲取日期:2016-12-12
翻譯日期:2016-12-16
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh

2016-12-12 Linux