C++ 将系统命令的输出存储到c中的本地字符数组中

C++ 将系统命令的输出存储到c中的本地字符数组中,c++,c,C++,C,有没有办法将系统命令的输出存储到字符数组中,因为系统命令只返回int。没有办法检索系统(3)的输出。嗯,您可以将执行的任何命令的输出重定向到一个文件,然后打开并读取该文件,但更明智的方法是使用popen(3) popen(3)取代了system(3),它允许您读取命令的输出(或者,根据您传递的标志,您可以写入命令的输入) 下面是一个执行ls(1)并打印结果的示例: #include <stdio.h> #include <stdlib.h> int main(void)

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

没有办法检索
系统(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;
}
#包括
#包括
内部主(空){
文件*ls_cmd=popen(“ls-l”、“r”);
如果(ls_cmd==NULL){
fprintf(标准“popen(3)错误”);
退出(退出失败);
}
静态字符buff[1024];
尺寸;
而((n=fread(buff,1,sizeof(buff)-1,ls_cmd))>0){
buff[n]='\0';
printf(“%s”,浅黄色);
}
如果(pclose(ls_cmd)<0)
perror(“pclose(3)错误”);
返回0;
}

int不是输出,而是退出值。。。查看管道。请使用您正在使用的平台编辑您的问题。使用特定于平台的功能,您需要执行的任务可能更高效。使用哪种语言?在C++中,文本的首选数据结构是:代码> STD::String 。C中不可用。记住,在动态文本处理中,需要有很多的努力,因为您需要有一个动态分配的字符数组。在C++中,类为您处理此问题。所以,明智地选择标签。