Получить стандартный вывод команды оболочки, используя процесс повышения - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь реализовать функцию в C ++, которая запускает команду оболочки и возвращает код завершения, stdout и stderr. Я использую Boost process library

std::vector<std::string> read_outline(std::string & file)
{
    bp::ipstream is; //reading pipe-stream
    bp::child c(bp::search_path("nm"), file, bp::std_out > is);

    std::vector<std::string> data;
    std::string line;

    while (c.running() && std::getline(is, line) && !line.empty())
        data.push_back(line);

    c.wait();

    return data;
}

В приведенном выше пример с сайта boost, в цикле while проверяется условие c.running ().Что если процесс завершит выполнение до того, как будет достигнут цикл while?В этом случае я не смогу сохранить стандартный вывод дочернего процесса в данные.В документации Boost также упоминается следующее

[Предупреждение] Предупреждение. Канал будет вызывать тупик, если вы попытаетесь выполнить чтение после выхода из nm

Следовательно,кажется, что проверка для c.running () должна быть в цикле while.

Как получить стандартный вывод (и стандартный вывод) из процессов, которые заканчиваются до того, как программа достигает цикла while?

1 Ответ

0 голосов
/ 25 сентября 2018

Я полагаю, для чего нужен ожидание.Дочерний процесс на самом деле не был перенесен в какую-либо ОС до этого (он просто меняет состояние после того, как не находится в рабочем состоянии).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...