我正在编写一个使用 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 http://www.velocityreviews.com/forums/t365339-write-eof-without-closing.html
我们可以自己写一个EOF字符吗? https://stackoverflow.com/questions/3061135/can-we-write-an-eof-character-ourselves
基本上 EOF 本身不是字符。这是文件的末尾。
因此,正如我在上面的评论中指出的那样,我建议您尝试使用直接连接到 gnuplot 的库。然后你应该能够控制它,以便实现你想要的行为(最有可能使用类似的东西replot
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)