【问题标题】:keep reading from a named pipe after the first write has finished第一次写入完成后继续从命名管道读取
【发布时间】:2020-08-20 07:16:14
【问题描述】:

我想将大量输入输入到一个连续运行的程序中(在我的例子中,它是 gnuplot,但它可以是任何程序)。 问题是在第一个块之后程序认为它已经完成并终止。 我正在用 bash 命令演示这一点:

在终端 1:创建一个命名管道并让cat 监听它:

mkfifo pipe
cat <pipe

在终端 2:将块送入管道:

echo foo >pipe
echo bar >pipe

一旦第一个echo 完成cat 就会终止。如何让它继续运行并处理更多输入?

【问题讨论】:

    标签: named-pipes eof terminate


    【解决方案1】:

    答案埋在hereC++案例):

    这样做的方法是以读写模式打开管道。这样,读过程也是写过程,只要管道打开,就不会被所有写者关闭

    命名管道被设计为在所有编写器(在本例中为一个 echo 命令)完成时关闭。要使其保持打开状态,请在读写模式下使用它:

    cat <>pipe
    

    最后必须手动杀死阅读器,或者通过输入它理解为退出命令的特殊序列(因为EOF 不再执行该工作)。例如,对于 gnuplot 和其他类似 shell 的程序,我可以说 echo exit &gt;pipe

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多