如何使用boost.process重定向stdin和stdout

时间:2018-02-07 06:34:28

标签: c++ windows boost stdio boost-process

我正在尝试重定向子进程的stdin和stdout。 想要用缓冲区中的二进制数据填充进程的stdin并读取它,(但是现在我只需要知道写入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();
写作看起来很成功,但程序陷入了read-while循环, 在此

期间,进程(子进程和父进程)保持空闲状态

1 个答案:

答案 0 :(得分:2)

工作代码,看起来我必须关闭内部管道以设置子项的标准(子项读取标准输入直到eof(在我的情况下)):

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();