![](/img/trans.png)
[英]Redirecting stdout of CreateProcess() to a pipe and reading it in another process c++ windows
[英]Sending output from child process to parent using pipe (redirecting stdout to pipe) using Boost C++
我是 Boost 库的新手。 我正在尝试使用bp::child c()
生成子进程并将标准输出重定向到管道/流。 我面临的问题是,将该流转换为字符串需要使用getline
,这是阻塞的。 因此,如文档中所述,创建子进程并执行它是非阻塞的。 但是由于 getline 是阻塞的,getline 之后的代码必须等到子进程完成执行。
是否有非阻塞替代 getline ? 或者我应该尝试以不同的方式将子进程的输出传达给父进程? 这是供参考的示例代码:
bp::ipstream p;
bp::child c(cmd, bp::std_out > p);
std::string line;
std::getline(p, line)
std::cout<<line;
//doSomething();
c.wait();
答案是不。 Boost 还提供了实现异步 I/O 的asio
库。 你可以试试看这里有一个例子供参考
boost::asio::io_service ios;
std::vector<char> buf(4096);
bp::async_pipe ap(ios);
bp::child c(cmd, bp::std_out > boost::asio::buffer(buf), ios);
//Do something
ios.run();
std::string s(buf.begin(), buf.end());
std::cout << s;
c.wait();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.