2010-07-27 86 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脚本等价物)在管道是空的时候进行读取而不是挂起你的程序。