The new showmanyc() code will immediately read as many characters as are available into the buffer, in non-blocking mode. This means that if you always check for available characters using streambuf::in_avail() and ensure you don't read more than that (e.g. by using istream::readsome() or istream::get()) then the parent process should never have to block waiting for data from the child.
The next step is to generalise this by providing a select()-like function, so you don't have to poll the two pipes connected to the child process' stdout and stderr. This is more important for the development branch where there could be any number of pipes shared between parent and child.