【问题标题】:How to flush a pipe using bash如何使用 bash 冲洗管道
【发布时间】:2010-07-27 22:43:35
【问题描述】:

我有一个写入命名管道的脚本和另一个从管道读取的脚本。有时,在启动脚本时,我注意到管道的内容存在于脚本的先前运行中。有没有办法在脚本开头冲洗掉管道?

【问题讨论】:

    标签: bash named-pipes


    【解决方案1】:

    我认为dd 是你的朋友:

    dd if=myfifo iflag=nonblock of=/dev/null
    

    strace 显示

    open("myfifo", O_RDONLY|O_NONBLOCK)
    

    实际上甚至不会阻塞空的fifo。

    【讨论】:

    • 迷惑了,这不是bash吗?
    • 不是在使用 bash 内置命令/功能的意义上,但绝对是在使用标准 unix 工具的 shell 脚本解决方案的意义上。
    【解决方案2】:

    您可以从管道中读取,直到它为空。这将有效地冲洗它。

    在您尝试这个大胆的壮举之前,请致电 fcntl(mypipe, F_SETFL, O_NONBLOCK)(我不知道等效的 shell 脚本)在管道为空时进行读取,而不是挂起您的程序。

    【讨论】:

      【解决方案3】:

      试试这个:

      “设置管道时打开 FD 读/写而不是只读可防止阻塞。”

      来自:

      Setting up pipelines reading from named pipes without blocking in bash

      【讨论】:

        猜你喜欢
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 2019-06-23
        • 2011-11-11
        • 2018-06-24
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        相关资源
        最近更新 更多