как перенаправить stdin и stdout с помощью 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();

запись выглядит успешной, но программа застряла в цикле чтения, процесс (как дочерний, так и родительский) во время этого остается в режиме ожидания.


person jaganantharjun    schedule 07.02.2018    source источник
comment
Если ваш дочерний процесс похож на эхо, вам, вероятно, нужно закрыть канал записи, прежде чем он перестанет пытаться читать из него и завершится (закрывая конец записи вашего канала чтения, когда он это делает).   -  person Miles Budnek    schedule 07.02.2018


Ответы (1)


Рабочий код, похоже, мне нужно закрыть внутренний канал, чтобы установить дочерний stdin eof (ребенок читает stdin до 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();
person jaganantharjun    schedule 07.02.2018