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

时间:2015-11-13 01:01:46

标签: c unix output

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

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

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

1 个答案:

答案 0 :(得分:2)

您无法使用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);
}