I saw the following code on boost::child documentation page where they explain how to read the output of a child process.
http://www.boost.org/doc/libs/1_64_0/doc/html/boost_process/tutorial.html
They say after running your child process, we can read it via this loop:-
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);
I have 2 questions here :-
- If
c.running()returns false, we simply exit the loop. And in that case, the streamisabove may still carry data which gets lost ? - What is the best way to read stdout and stderr both, while making sure the process exit() doesn't create a deadlock
There is a warning on the page saying :-
The pipe will cause a deadlock if you try to read after nm exited
I wish to capture both stdout and stderr without having to worry about nm has exited or not above.