【发布时间】:2010-07-27 22:43:35
【问题描述】:
我有一个写入命名管道的脚本和另一个从管道读取的脚本。有时,在启动脚本时,我注意到管道的内容存在于脚本的先前运行中。有没有办法在脚本开头冲洗掉管道?
【问题讨论】:
标签: bash named-pipes
我有一个写入命名管道的脚本和另一个从管道读取的脚本。有时,在启动脚本时,我注意到管道的内容存在于脚本的先前运行中。有没有办法在脚本开头冲洗掉管道?
【问题讨论】:
标签: bash named-pipes
我认为dd 是你的朋友:
dd if=myfifo iflag=nonblock of=/dev/null
strace 显示
open("myfifo", O_RDONLY|O_NONBLOCK)
实际上甚至不会阻塞空的fifo。
【讨论】:
您可以从管道中读取,直到它为空。这将有效地冲洗它。
在您尝试这个大胆的壮举之前,请致电 fcntl(mypipe, F_SETFL, O_NONBLOCK)(我不知道等效的 shell 脚本)在管道为空时进行读取,而不是挂起您的程序。
【讨论】:
试试这个:
“设置管道时打开 FD 读/写而不是只读可防止阻塞。”
来自:
Setting up pipelines reading from named pipes without blocking in bash
【讨论】: