概述
`mkfifo` 在文件系統中創建一個特殊文件,即命名管道。此管道充當一個通信通道,允許兩個或多個獨立的進程之間傳輸數據。一個進程寫入管道的數據,另一個進程可以從管道讀取,數據按照先進先出(FIFO)的順序處理。
主要特點
- 存在於文件系統中,可通過路徑訪問
- 提供獨立進程間的通信通道
- 數據按先進先出(FIFO)順序處理
- 在 shell 腳本中用於構建複雜的管道線非常有用
主要選項
`mkfifo` 命令主要以文件路徑作為參數,並支持一些基本選項。
創建選項
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`mkfifo` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用範例
展示如何使用 `mkfifo` 創建命名管道並通過它進行進程間通信。
創建基本的命名管道
mkfifo my_pipe
在當前目錄創建一個名為 `my_pipe` 的管道。
以特定權限創建管道
mkfifo -m 600 my_private_pipe
創建一個只有所有者可以讀寫的 `my_private_pipe`。
使用命名管道傳輸數據
mkfifo data_channel
echo "Hello from Terminal 1!" > data_channel &
cat < data_channel
一個終端寫入數據,另一個終端讀取的範例。 **終端 1:** `mkfifo data_channel` `echo "Hello from Terminal 1!" > data_channel` **終端 2:** `cat < data_channel`
與後台進程使用管道
mkfifo background_output
(ls -l; sleep 2; echo "Done listing") > background_output &
cat < background_output
將後台運行進程的輸出通過管道傳遞給其他命令。
提示與注意事項
使用命名管道時的注意事項和使用技巧。
刪除管道
命名管道可以像普通文件一樣使用 `rm` 命令刪除。建議在使用後清理不再需要的管道。
- `rm my_pipe`
阻塞(Blocking)行為
命名管道默認採用阻塞方式工作。這意味著,如果一端嘗試寫入(或讀取),而另一端尚未開始讀取(或寫入),則該操作將會等待。為避免此行為,可以像 `cat < my_pipe &` 一樣在後台運行,或者使用 `O_NONBLOCK` 標誌以非阻塞模式打開。
使用臨時文件系統
對於臨時使用的管道,建議使用 `/tmp` 目錄或 `mktemp` 命令創建具有唯一名稱的管道。這可以防止名稱衝突,並確保在系統重啟時自動清理。