【发布时间】:2018-03-27 10:04:02
【问题描述】:
我在 windows 上使用 _popen 有以下工作代码,
m_pGNUPlot = _popen("/gnuplot/bin/gnuplot.exe", "w");
fprintf(m_pGNUPlot, "set term win\n");
fprintf(m_pGNUPlot, "set term pngcairo\n");
fprintf(m_pGNUPlot, "plot \"\Data.txt\" using 1:2 notitle\n");
fprintf(m_pGNUPlot, "set output \"\Out.png\"\n");
fprintf(m_pGNUPlot, "replot\n");
fflush(m_pGNUPlot);
但是这样做的问题是cmd窗口不断弹出,没有办法阻止(Link) 所以,我在 boost::process 中写了等价的代码
bp::pipe m_Write;
bp::environment env = boost::this_process::environment();
m_Plot = new bp::child("/gnuplot/bin/gnuplot.exe", bp::std_in < m_Write, env, boost::process::windows::hide);
m_Write.write("set term win\n", sizeof(char)*14);
m_Write.write("set term pngcairo\n", sizeof(char) * 19);
m_Write("plot \"\Data.txt\" using 1:2 notitle\n", sizeof(char)*35);
m_Write("set output \"\Out.png\"\n", sizeof(char)*22);
m_Write.write("replot\n", sizeof(char) * 8);
所以,我的问题是 - 这两个代码 sn-ps 是否等效?如果是这样,为什么第二个不起作用?
【问题讨论】:
-
您的字符数错误 - 一个(\n 仅在字符上)。您还需要删除
\Data.txt和\Out.png前面的反斜杠 -
应该(并且可以)在编译时或运行时计算硬编码大小是一个非常糟糕的主意。
标签: c++ boost gnuplot popen boost-process