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

How to pass multiple commands using popen in C?

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

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

#include <stdio.h>

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

    pclose(fp);

    return 0;
}

你应该写,而不是读,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 问题

调用 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 可以将其作为输入读取。