如何使用bash冲洗管道

时间:2010-07-27 22:43:35

标签: bash named-pipes

我有一个写入命名管道的脚本和另一个从管道读取的脚本。有时,在启动脚本时,我注意到管道的内容存在于上一次运行的脚本中。有没有办法在脚本开头清除管道?

3 个答案:

答案 0 :(得分:9)

我认为dd是你的朋友:

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

strace show

open("myfifo", O_RDONLY|O_NONBLOCK)

实际上甚至没有阻止空的fifo。

答案 1 :(得分:1)

您可以从管道读取,直到它为空。这将有效地冲洗它。

在尝试这个大胆的专长之前,调用fcntl(mypipe, F_SETFL, O_NONBLOCK)(我不知道shell脚本等效)在管道为空时进行读取而不是挂起程序。

答案 2 :(得分:1)

试试这个:

“在设置管道时打开FD读/写而不是只读,可防止阻塞。”

从:

Setting up pipelines reading from named pipes without blocking in bash

相关问题