Как перенаправить стандартный ввод и вывод с помощью boost.process
Я пытаюсь перенаправить как 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();
запись выглядит успешной, но программа застряла в цикле чтения, процесс (и дочерний, и родительский) остается бездействующим
1 ответ
Решение
Рабочий код, похоже, мне нужно закрыть внутреннюю трубу, чтобы установить дочерний стандарт (ребенок читает стандарт до 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();