c++ - Gnuplot,来自 Windows 的 C++。命令窗口打开和关闭

标签 c++ pipe gnuplot

我有以下内容,无论我尝试什么,命令窗口都会再次打开和关闭。没有图显示,没有文件被写入。任何有从 C++ 使用 gnuplot 的解决方案的人。我有 4.4 和 4.6rc1 可用。

#ifdef WIN32
  gp = _popen("C:\Program Files (x86)\gnuplot\bin\pgnuplot.exe", "w");
#else
  gp = popen("gnuplot -persist", "w");
#endif


 if (gp == NULL)
       return -1;

  /* fprintf(gp, "unset border\n");
  fprintf(gp, "set clip\n");
  fprintf(gp, "set polar\n");
  fprintf(gp, "set xtics axis nomirror\n");
  fprintf(gp, "set ytics axis nomirror\n");
  fprintf(gp, "unset rtics\n");
  fprintf(gp, "set samples 160\n");
  fprintf(gp, "set zeroaxis");
    fprintf(gp, "  set trange [0:2*pi]");*/


  fprintf(gp, "set term png\n");
  fprintf(gp, "set output \"c:\\printme.png\"");
  fprintf(gp, "plot .5,1,1.5\n");
   fprintf(gp, "pause -1\n");

     fflush(gp);

最佳答案

以下程序已经使用 Visual Studio 和 MinGW 编译器在 Windows 上以及使用 gcc 在 GNU/Linux 上进行了测试。 gnuplot 二进制文件必须在路径上,并且在 Windows 上,必须使用二进制文件的管道 pgnuplot 版本。

我发现 Windows 管道比 GNU/Linux 上的相应管道慢得多。对于大型数据集,在 Windows 上通过管道将数据传输到 gnuplot 很慢而且通常不可靠。此外,按键等待代码在 GNU/Linux 上更有用,一旦调用 pclose() 绘图窗口就会关闭。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

// Tested on:
// 1. Visual Studio 2012 on Windows
// 2. Mingw gcc 4.7.1 on Windows
// 3. gcc 4.6.3 on GNU/Linux

// Note that gnuplot binary must be on the path
// and on Windows we need to use the piped version of gnuplot
#ifdef WIN32
    #define GNUPLOT_NAME "pgnuplot -persist"
#else 
    #define GNUPLOT_NAME "gnuplot"
#endif

int main() 
{
    #ifdef WIN32
        FILE *pipe = _popen(GNUPLOT_NAME, "w");
    #else
        FILE *pipe = popen(GNUPLOT_NAME, "w");
    #endif

    if (pipe != NULL)
    {
        fprintf(pipe, "set term wx\n");         // set the terminal
        fprintf(pipe, "plot '-' with lines\n"); // plot type
        for(int i = 0; i < 10; i++)             // loop over the data [0,...,9]
            fprintf(pipe, "%d\n", i);           // data terminated with \n
        fprintf(pipe, "%s\n", "e");             // termination character
        fflush(pipe);                           // flush the pipe

        // wait for key press
        std::cin.clear();
        std::cin.ignore(std::cin.rdbuf()->in_avail());
        std::cin.get();

        #ifdef WIN32
                _pclose(pipe);
        #else
                pclose(pipe);
        #endif
    }
    else
        std::cout << "Could not open pipe" << std::endl; 
return 0;
}

关于c++ - Gnuplot,来自 Windows 的 C++。命令窗口打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9349538/

相关文章:

c++ - 有趣的程序行为

r - 从 magrittr 切换到 native 管道时出错

创建 n 个 child ,每个 child 都有自己的管道

gnuplot - 在 Gnuplot 4.0 中选择线型和颜色

c++ - 在flex中匹配C风格多行注释的最佳解决方案?

c++ - boost - ASIO 与 IOStreams TCP

c++ - 如何使用 Glib(或任何其他库)列出目录中的所有文件?

linux - & 和 | 有什么区别在Linux中?

c++ - 在 C++ 中使用 gnuplot-iostream.h

gnuplot - 在 gnuplot 中使用标签样式设置变量文本颜色和点颜色