将命令执行的输出存储到数组

Store output from command execution to array

我有一个数组 char buffer[300],我想在其中存储执行 system("ls") 的输出。我该怎么做呢?更具体地说,我希望它类似于我的伪代码:

int main(void) {
    char buffer[300];
    //store output to buffer
    system("ls");

    //after storing output from system("ls") print buffer to terminal
    //printf(buffer);
}

system() 做不到。你可以用 popen() 如果你的系统支持的话。

一个类似于你的伪代码的例子(效率不高):

#include <stdio.h>

void runCommand(char* cmd, char* buffer, int size);

int main() {
    char buffer[300];
    runCommand("ls", buffer, 300);
    printf("%s\n", buffer);
    return 0;
}

void runCommand(char* cmd, char* buffer, int size) {
    int c, i=0;
    FILE* stream = popen(cmd, "r");
    while ((c = fgetc(stream)) != EOF && i < size-1)
        buffer[i++] = c;
    buffer[i] = 0; // null terminate string
    pclose(stream);
}

更简单的示例 - 逐行打印命令输出:

#include <stdio.h>

void main() {
    char buffer[300];
    FILE* stream = popen("ls", "r");
    while (fgets(buffer, 300, stream) != NULL)
        printf("%s", buffer);
    pclose(stream);
}