Этот код игнорирует порядок stdout / stderr. Если порядок сохраняется, вы можете написать так:

ел следующий код наboost::child страница документации, где объясняется, как читать выходные данные дочернего процесса.http://www.boost.org/doc/libs/1_64_0/doc/html/boost_process/tutorial.html Они говорят, что после запуска вашего дочернего процесса мы можем прочитать его через этот цикл:

bp::ipstream is; //reading pipe-stream
bp::child c(bp::search_patk("nm"), file, bp::std_out > is);

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

У меня есть 2 вопроса здесь:

Еслиc.running() возвращает false, мы просто выходим из цикла. И в этом случае потокis выше может все еще нести данные, которые теряются?Как лучше всего читать stdout и stderr и убедиться, что процесс exit () не создает тупик? На странице есть предупреждение: -
Канал вызовет тупик, если вы попытаетесь прочитать после выхода из NM

Я хочу захватить обаstdout а такжеstderr не беспокоясь оnm вышел или нет выше.

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

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