Как вызвать программу и считать её вывод?

Необходимо запустить внешнюю программу и прочитать её стандартный вывод. Внешняя программа запускается, выводит результат и сразу завершается, например ls. Платформа linux, язык программирования c++, нужно использовать только стандартную библиотеку и системные вызовы.

Пока есть только такой вариант

#include <cstdlib>
#include <fstream>
#include <iostream>
 
int main()
{
    std::system("ls >lsout.txt");
    std::cout << std::ifstream("lsout.txt").rdbuf();
}

Ответы (1 шт):

Автор решения: Maxim

Возможно использовать функцию popen()

    fflush(stdout);
    FILE* fd = popen(cmd.c_str(), "r");
    if (fd != nullptr) {
        char buf[10];
        for (int r = 0; (r = fread(buf, 1, sizeof(buf), fd)) > 0;) {
            out_data.append(static_cast<const char*>(buf), r);
        }

        pclose(fd);
    }
→ Ссылка