Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to redirect stdin and stdout using boost.process

i am trying to redirect both stdin and stdout of a child process. want to fill the stdin of the process with binary data from buffers and read that,(but for now i only need to know how much is written to stdout)

namespace  bp = boost::process;
bp::opstream in;
bp::ipstream out;

bp::child c(Cmd.c_str(), bp::std_out > out, bp::std_in < in);

in.write((char*)buffer,bufferSize);
integer_type totalRead = 0;
char a[10240];
while (out.read(a,10240))  totalRead += out.gcount();
c.terminate();

write looks to be successful but program got stuck in reading-while loop, process(both child and parent) remains idle during this

like image 441
jaganantharjun Avatar asked Feb 07 '18 06:02

jaganantharjun


1 Answers

Working Code, looks like i have to close the internal pipe to set the child's stdin eof(child reads stdin until eof (in my case)) :

namespace  bp = boost::process;
bp::opstream in;
bp::ipstream out;

bp::child c(Cmd.c_str(), bp::std_out > out, bp::std_in < in);    
in.write((char*)buffer,bufferSize);

in.pipe().close();

integer_type totalRead = 0;
char a[10240];
while (out.read(a,10240))  totalRead += out.gcount();
c.terminate();
like image 50
jaganantharjun Avatar answered Oct 03 '22 22:10

jaganantharjun