Я пытаюсь реализовать функцию в 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?