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