【发布时间】:2012-03-09 11:49:30
【问题描述】:
我正在编写一个使用 GnuPlot 绘制数据的应用程序。 我决定使用“二进制”格式,而不是使用文本格式通过管道通信两个程序(由于 vprintf() 和传递的大量数据,速度很慢)。
问题在于二进制格式的 GnuPlot 需要 EOF (Ctrl+D) 来结束传输并绘制数据。这在 UNIX 控制台模式下很容易。只需按 Ctrl+D 即可结束数据输入,绘制数据并保持控制台打开等待更多命令。
但在我的 C++ 应用程序中,发送 EOF 的唯一方法是关闭管道。这会导致 gnuplot 进程终止,并且不会在屏幕上显示绘图。
¿有什么技巧可以将 EOF 发送到管道吗? ¿ UNIX 终端如何在不关闭正在运行的进程的管道的情况下发送 EOF?
PD:我无法使用“-persist”关闭并重新打开 GnuPlot,因为这会生成一个新图而不是更新旧图(它是一个实时系统,因此它会在 ~inf 绘图窗口附近生成)。
【问题讨论】:
-
您是否尝试过使用直接提供管道的库 go gnuplot?更多信息:ndevilla.free.fr/gnuplot
-
那个界面看起来很酷。但是我自己已经写了一个草稿。无论如何,我认为它不处理“二进制”格式......或者至少我没有找到它。顺便说一句,我已经使用 gnuplot 的直接管道。
-
这对你来说也可能很有趣:users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html 它使用 bash 来做管道。但是您可以使用程序的标准输出来进行绘图。