首次写入完成后,继续从命名管道读取

问题描述

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

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

mkfifo pipe
cat <pipe

在2号航站楼中:将块放入管道中

echo foo >pipe
echo bar >pipe

一个echo完成后,cat终止。如何使它继续运行并处理更多输入?

解决方法

答案被掩埋在hereC++案例中):

方法是在读写模式下打开管道。这样,阅读过程也将是写作过程,只要管道打开,它就永远不会被所有作者关闭。

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

cat <>pipe

最后,必须手动关闭阅读器,或者通过提供一个可以理解为退出命令的特殊序列(因为EOF不再执行此操作),将其杀死。例如,对于gnuplot和其他类似shell的程序,我可以说echo exit >pipe

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...