Вы можете получить код возврата из канала с помощью пользовательского средства удаления:

вая следующий ответ (первый ответ c ++ 11):

Как выполнить команду и получить вывод команды в C ++, используя POSIX?

Вот реализация для вашего удобства:

#include <cstdio>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
#include <array>

std::string exec(const char* cmd) {
    std::array<char, 128> buffer;
    std::string result;
    std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
    if (!pipe) throw std::runtime_error("popen() failed!");
    while (!feof(pipe.get())) {
        if (fgets(buffer.data(), 128, pipe.get()) != nullptr)
            result += buffer.data();
    }
    return result;
}

Это очень хорошо работает для выполнения команды (например,std::string res = exec("ls");) и получить стандартный вывод в строку.

Но что он не делает, так это получает код возврата команды (pass / fail integer) или stderr. В идеале я хотел бы получить способ получить все три (код возврата, стандартный вывод, стандартный вывод).

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

У кого-нибудь есть идеи, как это сделать, или альтернативные подходы, которые могут работать?

Обновить

Смотрите мой полный примерВот с выводом:

Start
1 res: /home

2 res: stdout

stderr
3 res: 
End

Ты это видишь3 res: не печатает stderr так же, как2 res: stdout делает, но stderr просто выводится на экран отдельной строкой процесса (а не моей программы).

Внешние Libs

Я действительно не хочу использовать внешние библиотеки, такие как Qt и boost - в основном потому, что я хочу их переносимость, а также многие проекты, над которыми я работаю, не используют boost. Однако я отмечу решения, которые содержат эти параметры, так как они действительны для других пользователей :)

Полное решение с использованием комментариев / ответа

Спасибо всем за ваши ответы / комментарии, вот модифицированное решение (и работоспособное):

рабочий раствор

Ответы на вопрос(3)

Ваш ответ на вопрос