如何使用 bash 冲洗管道
我有一个写入命名管道的脚本和另一个从管道读取的脚本。有时,在启动脚本时,我注意到管道的内容在脚本的先前运行中存在。有没有办法在脚本开头冲洗管道?
I have a script that writes to a named pipe and another that reads from the pipe. Occasionally, when starting the script I have noticed that the contents of the pipe exist from a previous run of the script. Is there a way to flush out the pipe at the beginning of the script?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为 dd 是你的朋友:
strace 显示
并且实际上甚至不会阻塞空 fifo。
I think
dd
is your friend:strace shows
and indeed doesn't even block on an empty fifo.
您可以从管道中读取数据,直到它为空。这将有效地冲洗它。
在尝试这一大胆的壮举之前,请调用 fcntl(mypipe, F_SETFL, O_NONBLOCK) (我不知道 shell 脚本等效项)在管道为空时进行读取,而不是挂起程序。
You can read from the pipe until it is empty. This will effectively flush it.
Before you attempt this daring feat, call
fcntl(mypipe, F_SETFL, O_NONBLOCK)
(I don't know the shell-scripting equivalent) to make a read when the pipe is empty not hang your program.试试这个:
“设置管道时打开 FD 读/写而不是只读可以防止阻塞。”
来自:
设置从命名管道读取的管道,无需在 bash 中阻塞
Try this:
"Opening the FD read/write rather than read-only when setting up the pipeline prevents blocking."
from:
Setting up pipelines reading from named pipes without blocking in bash