2010-07-27 33 views
7

我有一個寫入命名管道和另一個從管道讀取的腳本。偶爾,在啓動腳本時,我注意到管道的內容是從前面的腳本運行中存在的。有沒有辦法在腳本的開頭刷新管道?如何使用bash沖刷管道

回答

5

我覺得dd是你的朋友:

dd if=myfifo iflag=nonblock of=/dev/null 

strace的顯示

open("myfifo", O_RDONLY|O_NONBLOCK) 

,事實上甚至沒有一個空的FIFO存儲塊。 「設置當管道可防止堵塞打開FD讀/寫,而不是隻讀」。

+0

困惑,這不是bash的是什麼呢? – 2017-07-08 03:46:04

+0

不是使用bash-builtin命令/功能,而是使用標準unix工具的shell腳本解決方案。 – mvds 2017-07-08 04:47:35

1

您可以從管道讀取,直到它爲空。這將有效地衝洗它。

在你嘗試這個大膽的壯舉之前,請撥fcntl(mypipe, F_SETFL, O_NONBLOCK)(我不知道shell腳本等價物)在管道是空的時候進行讀取而不是掛起你的程序。