如何解决首次写入完成后,继续从命名管道读取
我想将大量的输入信息输入到一个连续运行的程序中(在我的情况下是gnuplot,但它可以是任何程序)。 问题在于,在第一个块之后,程序认为它已完成并终止。 我正在用bash命令演示这一点:
在终端1中:创建一个命名管道,让cat
监听它:
mkfifo pipe
cat <pipe
在2号航站楼中:将块放入管道中
echo foo >pipe
echo bar >pipe
第一个echo
完成后,cat
终止。如何使它继续运行并处理更多输入?
解决方法
答案被掩埋在here(C++
案例中):
方法是在读写模式下打开管道。这样,阅读过程也将是写作过程,只要管道打开,它就永远不会被所有作者关闭。
命名管道设计为在完成所有编写器(在本例中为一个echo命令)时关闭。要使其保持打开状态,请以读写模式使用它:
cat <>pipe
最后,必须手动关闭阅读器,或者通过提供一个可以理解为退出命令的特殊序列(因为EOF
不再执行此操作),将其杀死。例如,对于gnuplot和其他类似shell的程序,我可以说echo exit >pipe
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。