Я хочу, чтобы boost-process запускал процесс и записывал / читал в его стандартный ввод / вывод. В принципе код работает, но он не заканчивается. Мне кажется, что внешняя программа не получает EOF, хотя я закрываю поток для записи в stdin процесса. Любые идеи, как заставить процесс отправить EOF? Код работает, если я удаляю код для записи в / bin / cat stdin. Затем я могу ввести текст и по Ctrl-D он заканчивается. Любые идеи, как отправить EOF через поток?
Мой код:
std::vector<std::string> args;
args.push_back("/bin/cat");
boost::process::pipe procout = boost::process::create_pipe();
boost::process::pipe procin = boost::process::create_pipe();
{
boost::iostreams::file_descriptor_sink fdsink(procout.sink,
boost::iostreams::close_handle);
boost::iostreams::file_descriptor_source fdsource(procin.source,
boost::iostreams::close_handle);
boost::process::execute(
boost::process::initializers::set_args(args),
boost::process::initializers::bind_stdin(fdsource),
boost::process::initializers::bind_stdout(fdsink)
);
}
boost::iostreams::file_descriptor_source source(procout.source,
boost::iostreams::close_handle);
boost::iostreams::file_descriptor_sink sink(procin.sink,
boost::iostreams::close_handle);
boost::iostreams::stream<boost::iostreams::file_descriptor_source> is(source);
boost::iostreams::stream<boost::iostreams::file_descriptor_sink> os(sink);
os << "Some text " << std::endl;
os.close();
std::string s;
for (;;) {
std::getline(is, s);
if (is.eof()) {
break;
}
std::cout << s << std::endl;
}
Задача ещё не решена.
Других решений пока нет …