.\" This man page is Copyright (C) 1999 Claus Fischer. .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" .\" 990620 - page created - aeb@cwi.nl .\" .TH FIFO 7 2016-12-12 "Linux" "Linux Programmer's Manual" .SH NAME fifo \- 先進先出的特殊文件, 命名管道 .SH "描述" 一個先進先出(FIFO)的特殊文件(一個命名管道)類似一個管道,但它是作爲文件系統的 一部分來訪問的。 可以同時有多個進程打開它進行讀寫。當進程間通過 FIFO 交換數據時,內核會在其內部傳送 所有數據,而不會寫入文件系統。即,FIFO 特殊文件在文件系統中沒有任何內容; 文件系統中的文件條目只是作爲一個參照點而已,使得進程可以用文件系統中的一個名字 對其進行訪問。 .PP 內核會爲至少有一個進程打開了的 FIFO 特殊文件維護單獨一個管道對象。 在數據經由 FIFO 傳輸之前,FIFO 的兩端(讀和寫)必須同時打開。 一般來說,打開 FIFO 的行爲會阻塞,直至另一端也被打開。 .PP 一個進程可以使用非阻塞模式打開一個 FIFO。這種情況下,即使寫端沒有打開, 打開讀端還是會成功。但是,如果讀端沒有打開,打開寫端會失敗,並且得到 一個 .B ENXIO (設備或地址不存在)。 .PP 在 Linux 下,不管是阻塞還是非阻塞模式,打開一個 FIFO 用作同時讀寫都會成功。 POSIX 對於這種情況未進行定義。這個可以用來在讀端不可用的情況下打開寫端。 一個進程在同時用同一個 FIFO 的兩端來實現自己和自己通信的時候要特別小心, 應避免出現死鎖。 .SH "註釋" 當一個進程企圖向讀端沒有打開的 FIFO 寫數據的時候,進程會收到一個 .B SIGPIPE 信號。 FIFO 特殊文件可以用 .BR mkfifo (3) 來創建,並且 .IR "ls -l" 會對其添加一個特殊標記“p”進行指示。 .SH "參見" .BR mkfifo (1), .BR open (2), .BR pipe (2), .BR sigaction (2), .BR signal (2), .BR socketpair (2), .BR mkfifo (3), .BR pipe (7) .SH "跋" 本頁面原英文版是 Linux .I man-pages 項目 4.09 版的一部分。 如需瞭解這個項目的描述、彙報漏洞的相關信息及本頁面的最新版本, 請訪問 \%https://www.kernel.org/doc/man\-pages/. .br 本頁面中文版由中文 man 手冊頁計劃提供。 .PP 翻譯人員:Boyuan Yang <073plan@gmail.com> .br 獲取日期:2016-12-12 .br 翻譯日期:2016-12-16 .br .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR