.\" 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 4 "20 Jun 1999" "Linux Man Page" "Linux Programmer's Manual" .SH NAME fifo \- 先進先出的特殊文件, 又名管道 .SH "描述 (DESCRIPTION)" 一個 FIFO 特殊 文件 (又名 管道) 同 管道線 相似, 但是 它是 作為 文件 系統 的 一部分 訪問的. 可以 有 多個 進程 打開它 以供 讀寫. 當 進程 通過 FIFO 交換 數據 的時候, 內核 在內部 傳送 所有 數據 而 不會 把它 寫入 文件 系統, 也就是說 FIFO 特殊 文件 在 文件 系統 中 沒有 任何 內容, 文件 系統 項 只是 作為 進程 可以 用 文件 系統 中的 一個 名字 來 訪問 管道 的 一個 參照點. .PP 內核 會 為 至少 有 一個 進程 打開 了的 FIFO 特殊 文件 維護 並且 也只 維護 一個 管道 對象. 在 數據 傳給 FIFO 之前, FIFO 的 兩端 (讀 和 寫) 必須 同時 打開. 一般 來說 打開 FIFO 會 阻塞 直至 另一端 也 打開. .PP 一個 進程 可以 以 非阻塞 模式 打開 一個 FIFO. 這種 情況下, 即使 寫端 沒有 打開, 打開 讀端 還是 會 成功, 但是, 如果 讀端 沒有 打開, 打開 寫端 會 失敗, 並且 得到 一個 ENXIO (設備 或 地址 不存在). .PP 在 Linux 下, 不管 是 阻塞 還是 非阻塞 模式, 打開 一個 FIFO 用作 讀 和 寫 都會 成功. POSIX 關于 這種 情況 沒有 定義. 這個 可以 用來 在 讀端 沒有 打開 的 情況 下 打開 寫端. 一個 進程 在 同時 用 FIFO 的 兩端 來 和 自己 通信 的 時候 要 特別 注意 以防 死鎖. .SH "注意 (NOTES)" 當 一個 進程 企圖 向 讀端 沒有 打開 的 FIFO 寫 數據 的 時候, 進程 會 收到 一個 SIGPIPE 信號. FIFO 特殊 文件 可以 用 .BR mkfifo (3) 來 創建 並且 .IR "ls -l" 會 給它 一個 特殊 的 標記. .SH "參見 (SEE ALSO)" .BR mkfifo (3), .BR mkfifo (1), .BR pipe (2), .BR socketpair (2), .BR open (2), .BR signal (2), .BR sigaction (2) .SH "[中文版維護人]" .B 唐友 \ .SH "[中文版最新更新]" .BR 2001/10/9 .SH "[中國Linux論壇man手冊頁翻譯計劃]" .BI http://cmpp.linuxforum.net