在管道中发送EOF而不关闭它

时间:2012-03-09 11:49:30

标签: pipe gnuplot eof

我正在编写一个使用GnuPlot绘制数据的应用程序。 而不是使用文本格式通过管道通信两个程序(由于vprintf()和传递的大量数据,它很慢)我决定使用“二进制”格式。

问题在于,在二进制格式中,GnuPlot期望EOF(Ctrl + D)结束传输并绘制数据。在UNIX控制台模式下这很容易。只需按Ctrl + D即可结束数据输入,绘制数据并保持控制台打开等待更多命令。

但在我的C ++应用程序中,发送EOF的唯一方法是关闭管道。这会导致gnuplot进程死亡,并且不会向屏幕显示绘图。

¿是否有一些技巧可以将EOF发送到管道? ¿UNIX终端如何管理发送EOF而不用正在运行的进程关闭其管道?

PD:我不能用“-persist”关闭并重新打开GnuPlot,因为这会产生一个新的情节,而不是更新旧的情节(它是一个实时系统,所以它会产生近〜inf的情节窗口)。

1 个答案:

答案 0 :(得分:1)

我不认为你想做什么会起作用。例如见:

http://www.velocityreviews.com/forums/t365339-write-eof-without-closing.html

Can we write an EOF character ourselves?

基本上EOF本身并不是一个角色。这是文件的结尾。

正如我在上面的评论中所提到的,我建议您尝试使用直接连接到gnuplot的库。然后你应该能够控制它,以便实现你想要的行为(最有可能使用像replot这样的东西。)