将system命令的输出存储到c中的本地char数组中

时间:2015-08-02 18:17:00

标签: c++ c

有没有办法将system命令的输出存储到char数组中,因为system命令只返回int。

1 个答案:

答案 0 :(得分:2)

无法检索system(3)的输出。好吧,您可以将执行的任何命令的输出重定向到文件,然后打开并读取该文件,但更合理的方法是使用popen(3)

popen(3)替换system(3),它允许您读取命令的输出(或者,根据您传递的标志,您可以写入命令的输入)。

这是一个执行ls(1)并打印结果的示例:

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

int main(void) {
    FILE *ls_cmd = popen("ls -l", "r");
    if (ls_cmd == NULL) {
        fprintf(stderr, "popen(3) error");
        exit(EXIT_FAILURE);
    }

    static char buff[1024];
    size_t n;

    while ((n = fread(buff, 1, sizeof(buff)-1, ls_cmd)) > 0) {
        buff[n] = '\0';
        printf("%s", buff);
    }

    if (pclose(ls_cmd) < 0)
        perror("pclose(3) error");

    return 0;
}