从OS X中的C程序运行终端命令

时间:2015-07-03 01:07:05

标签: c macos pipe system popen

我试图使用plotutils从二进制数据生成一个图。首先,我编写了一个C程序来导出一些样本二进制数据。然后,当我在终端中执行以下命令时,将按预期生成绘图。

graph -T png -I d <'/Users/username/Documents/Restofpath/PlotutilsDataGen/testData'> '/Users/username/Documents/Restofpath/PlotutilsDataGen/testPlot.png'

但我希望将此命令与生成二进制数据文件的C代码结合使用,以便在执行代码后,将自动导出绘图。我尝试了两种方法:(i)使用我怀疑我做错的popen(),以及(ii)使用我认为应该有效的system(),但不是。我的整个代码如下(我已经在代码中列出了两种方法,我自然会单独尝试它们):

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int numSamples = 1024;
    double outputVec[2*numSamples];
    char outputPath[200] = "/Users/username/Documents/Restofpath/PlotutilsDataGen/testData";
    char plotcommand[400] = "graph -T png -I d <'/Users/username/Documents/Restofpath/PlotutilsDataGen/testData'> '/Users/username/Documents/Restofpath/PlotutilsDataGen/testPlot.png'";
    FILE *fp, *p;

    // Compute sample functions to export
    for(int ii = 0; ii < (2*numSamples); ii = ii + 2)
    {
        outputVec[ii] = (double)ii/2;
        outputVec[ii+1] = (double)(ii*2);
    }

    // Export as binary data file for plotutils to use for plotting
    fp = fopen(outputPath, "wb");
    fwrite(outputVec, sizeof(double), 2*numSamples, fp);
    fclose(fp);

    // Option 1
    p = popen(plotcommand, "w");
    pclose(p);

    // Option 2
    system(plotcommand);

    return 0;
}

关于我做错了什么或者我如何让它发挥作用的任何想法?感谢。

0 个答案:

没有答案