如何在C中使用popen传递多个命令?

时间:2015-04-23 16:37:42

标签: c gnuplot popen

我正在尝试使用GNUPLOT绘制图形,这是一个命令行界面。但我需要将它集成到c程序中,这样如果程序执行,则绘制图形。这可以通过使用popen命令来完成。我已经制作了一个代码,我正在做popen("gnuplot","r")所以现在当我执行程序时,gnuplot启动了。但我需要在popen("sin(x)","r")之后发送多个命令,如popen("gnuplot","r"),以便在执行代码时绘制sin图。但我不知道如何传递多个命令。请告诉我如何使用popen传递多个命令。请帮忙谢谢?

以下是我用来发送单个命令的代码:

#include <stdio.h>

int main()
{
    FILE *fp;
    int status;
    fp = popen("gnuplot","r");

    pclose(fp);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

你应该写{而非阅读'到gnuplot,所以试试:

FILE *fp = popen("gnuplot","w");
if (!fp) { perror("popen gnuplot"); exit(EXIT_FAILURE); };
fprintf(fp, "plot sin(x)/x\n");
fflush(fp);

不要忘记pclose(fp)你完成的地方。但这可能会关闭绘制的图形。请参阅gnuplot FAQ

的§7.8问题

答案 1 :(得分:1)

一旦调用了popen(),你的文件描述符'fp'就会打开,并允许你通过它写入数据,gnuplot命令将把它看作输入。请注意,类型应该是您想要对管道执行的操作,而不是命令将对其执行的操作,因此您应该使用'w',因为您要编写。并且您可以按顺序发出多个命令,直到完成为止。

例如:

#include <stdio.h>

int main()
{
    FILE *fp;
    int status;
    fp = popen("gnuplot","w");
    fprintf(fp, "plot sin(x)\n");
    fprintf(fp, "plot tan(x)\n");

    pclose(fp);

    return 0;
}

将通过管道发送“sin(x)”和“tan(x)”后跟换行符,gnuplot可以将其作为输入读取。