2015-11-13 2 views
-1

У меня есть массив 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); 
} 
+0

см [POPEN ] (http://linux.die.net/man/3/popen) – BLUEPIXY

ответ

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); 
} 

Simpler пример - Печать вывода командной строки построчно:

#include <stdio.h> 

void main() { 
    char buffer[300]; 
    FILE* stream = popen("ls", "r"); 
    while (fgets(buffer, 300, stream) != NULL) 
     printf("%s", buffer); 
    pclose(stream); 
} 
Смежные вопросы