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

C 将命令执行的输出存储到数组,c,unix,output,C,Unix,Output,我有一个数组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

我有一个数组
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()
执行此操作。你可以用它来做 如果您的系统支持它

与伪代码类似的示例(效率不高)

#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);
}
#包括
void runCommand(char*cmd,char*buffer,int size);
int main(){
字符缓冲区[300];
runCommand(“ls”,缓冲区,300);
printf(“%s\n”,缓冲区);
返回0;
}
void runCommand(char*cmd,char*buffer,int size){
int c,i=0;
文件*stream=popen(cmd,“r”);
而((c=fgetc(流))!=EOF&i
更简单的示例-逐行打印命令输出:

#include <stdio.h>

void main() {
    char buffer[300];
    FILE* stream = popen("ls", "r");
    while (fgets(buffer, 300, stream) != NULL)
        printf("%s", buffer);
    pclose(stream);
}
#包括
void main(){
字符缓冲区[300];
文件*stream=popen(“ls”,“r”);
while(fgets(缓冲区,300,流)!=NULL)
printf(“%s”,缓冲区);
pclose(流);
}
请参见