在另一个中调用C程序并在macOS中获取子项的输出

时间:2017-02-05 19:30:52

标签: c parent-child

我有两个C程序,我试图在一些父程序“parent.c”中调用一些子程序“child.c”,并从child.c捕获输出到stdout。我该怎么做呢?

我正在使用macOS。

这是parent.c和child.c可能看起来像

的示例

parent.c

while (1)
{
    // call the child program
    // capture the output from the child
    if (child_output == some_condition)
    {
        break;
    }
}

child.c

printf("Hello world!")

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

只需使用popen()并创建FILE *类型的流对象,您可以将其与fread() / fgets()一起使用,以获取子程序的输出。阅读手册页应足以让您入门。

但这是一个例子

#include <stdio.h>

int
main(void)
{
    FILE *pipe;
    char line[256];
    pipe = popen("ls", "r");
    if (pipe != NULL) {
        while (fgets(line, sizeof line, pipe) != NULL) {
            fprintf(stdout, "%s", line);
        }
        pclose(pipe);
    }
    return 0;
}

另外,阅读手册以了解其实际效果如何。