Получение вывода системной команды из stdout в C

Я пишу программу C под Android/Linux, которая запускает системную команду. Команда выводит некоторый текст в stdout, и я пытаюсь захватить вывод в строку или массив символов.

Например:

system("ls");

будет отображать содержимое текущего каталога в stdout, и я хотел бы иметь возможность записывать эти данные в переменную программно в C.

Как это сделать?

Спасибо.

Ответ 1

Вы хотите использовать popen. Он возвращает поток, например fopen. Однако вам нужно закрыть поток с помощью pclose. Это связано с тем, что pclose выполняет очистку ресурсов, связанных с запуском дочернего процесса.

FILE *ls = popen("ls", "r");
char buf[256];
while (fgets(buf, sizeof(buf), ls) != 0) {
    /*...*/
}
pclose(ls);