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 <
[email protected]>
獲取日期:2016-12-12
翻譯日期:2016-12-16
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh