How to flush a pipe using bash

后端 未结 3 2080
别跟我提以往
别跟我提以往 2021-01-02 01:44

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

相关标签:
3条回答
  • 2021-01-02 02:35

    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.

    0 讨论(0)
  • 2021-01-02 02:42

    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.

    0 讨论(0)
  • 2021-01-02 02:43

    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

    0 讨论(0)
提交回复
热议问题