gpt4 book ai didi

c++ - 关闭 boost::process child 的标准输入

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:01 26 4
gpt4 key购买 nike

我正在尝试使用 Boost-1.64.0 调用一个带有字符串到其标准输入的进程。当前代码是:

  bp::opstream inStream ;
bp::ipstream outStream;
bp::ipstream errStream;

bp::child child(
command, // the command line
bp::shell,
bp::std_out > outStream,
bp::std_err > errStream,
bp::std_in < inStream);


// read the outStream/errStream in threads

child.wait();

问题是子可执行文件正在等待其标准输入 EOF。这里 child.wait() 无限期挂起......

我尝试使用 asio::buffer, std_in.close(),... 但没有成功。我发现的唯一 hack 是 delete() inStream……这并不可靠。

我应该如何“通知”子进程并使用新的 boost::process 库关闭其标准输入?

谢谢!

最佳答案

I tried to used asio::buffer, std_in.close()

这行得通。当然,它只有在将它传递给启动函数(bp::child 构造函数、bp::system 等)时才有效。

如果您需要传递数据,然后关闭它,只需关闭关联的文件描述符即可。我做这样的事情:

boost::asio::async_write(input, bp::buffer(_stdin_data), [&input](auto ec, auto bytes_written){
if (ec) {
logger.log(LOG_WARNING) << "Standard input rejected: " << ec.message() << " after " << bytes_written << " bytes written";
}
may_fail([&] { input.close(); });
});

input 在哪里

bp::async_pipe input(ios);

此外,检查进程是否真的没有卡住发送输出!如果您未能使用输出,它将缓冲并在缓冲区已满时等待。

关于c++ - 关闭 boost::process child 的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44239499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com