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

标签 c++ c

有什么方法可以将系统命令的输出存储到 char 数组中,因为系统命令只返回 int。

最佳答案

无法检索 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;
}

关于c++ - 将系统命令的输出存储到 c 中的本地字符数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31775067/

相关文章:

c - 我应该避免在堆栈上放置大对象吗?

c++ - 模板仿函数与函数

c++ - 引用未初始化的内存而不访问它是否合法?

c++ - 接收二进制数据并写入(C++套接字编程)

c++ - Internet Explorer 控件不会加载 CSS 和 JS

c - 对 libusb_hotplug_register_callback 的 undefined reference

无法用 C 中的 12 位数字计算质因数

C++ ifstream 失败,为什么这条线没有到达它应该去的地方?

c - 在 C 中使用指针打印数组时出现问题

c++ - 命名空间和 c++/c 混合 header