2013-03-13 125 views
11

我試圖寫入命名管道,使用mkfifo。但是當我運行命令時,(ex)ls > myNamedPipe,我不能再輸入命令到bash中。我仍然可以編寫角色,這就是它。無法寫入命名管道

回答

18

命名管道保持打開狀態,直到您從其他位置讀取它爲止。這是爲了允許不同進程之間的通信。

嘗試:

mkfifo fifo 
echo "foo" > fifo 

然後打開另一個終端類型:

cat fifo 

如果您返回到第一終端,你會發現,你現在可以輸入其他命令。

參見什麼用反向happends:

# terminal 1 
cat fifo 

# terminal 2 
echo "foo" > fifo 

# and now you can see "foo" on terminal 1 

如果你想你終端不嘗試寫一些東西到FIFO,連接到FIFO文件描述符時「上掛起」:

mkfifo fifo 
exec 3<> fifo 
echo "foo" > fifo 
echo "bar" > fifo 
+0

非常感謝!謝謝一堆! – tay10r 2013-03-13 04:38:51

+0

謝謝 - 這很好用!你能解釋我爲什麼嗎?我不太清楚'exec 3 <> fifo'行如何修復東西.. – Joost 2013-12-06 13:53:33

+4

將fifo連接到文件描述符會導致shell緩衝寫入fifo的數據。沒有它,任何對fifo的寫入都會阻塞,直到讀取寫入的內容爲止。使用文件描述符,shell會緩存「foo」和「bar」,並且任何從該文件描述符讀取的內容都可以在稍後讀取它們。 – chepner 2014-01-17 15:21:25