我正在编写一个使用GnuPlot绘制数据的应用程序。我决定使用“二进制”格式,而不是使用文本格式通过管道来通信这两个程序(这很慢,因为vprintf()和大量数据正在传递)。
问题在于,二进制格式的GnuPlot期望EOF(Ctrl + D)结束传输并绘制数据。在UNIX控制台模式下,这很容易。只需按Ctrl + D即可结束数据输入,绘制数据并保持控制台打开以等待更多命令。
但是在我的C ++应用程序中,发送EOF的唯一方法是关闭管道。这将导致gnuplot进程终止,并且不会在屏幕上显示该图。
¿是否有将EOF发送到管道的技巧?¿UNIX终端如何在不关闭正在运行的进程的情况下设法发送EOF?
PD:我无法使用“ -persist”关闭并重新打开GnuPlot,因为它会生成一个新图,而不是更新旧图(这是一个实时系统,因此会在〜inf图窗口附近生成)。
我认为你想做的事情不会成功。参见示例:
http://www.velocityreviews.com/forums/t365339-write-eof-without-looking.html
基本上 EOF 本身不是字符。这是文件的末尾。
因此,正如我在上面的评论中指出的那样,我建议您尝试使用直接连接到 gnuplot 的库。然后你应该能够控制它,以便实现你想要的行为(最有可能使用类似的东西replot
)。