How to flush a pipe using 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 fro开发者_如何学Pythonm a previous run of the script. Is there a way to flush out the pipe at the beginning of the script?
I think dd
is your friend:
dd if=myfifo iflag=nonblock of=/dev/null
strace shows
open("myfifo", O_RDONLY|O_NONBLOCK)
and indeed doesn't even block on an empty fifo.
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.
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
精彩评论