【问题标题】: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】:
答案埋在here(C++案例):
这样做的方法是以读写模式打开管道。这样,读过程也是写过程,只要管道打开,就不会被所有写者关闭
命名管道被设计为在所有编写器(在本例中为一个 echo 命令)完成时关闭。要使其保持打开状态,请在读写模式下使用它:
cat <>pipe
最后必须手动杀死阅读器,或者通过输入它理解为退出命令的特殊序列(因为EOF 不再执行该工作)。例如,对于 gnuplot 和其他类似 shell 的程序,我可以说 echo exit >pipe。