gpt4 book ai didi

c++ - async_pipe 子进程上的 async_read 不提供任何数据

转载 作者:行者123 更新时间:2023-11-30 03:27:08 24 4
gpt4 key购买 nike

我有以下代码,它是从我的真实代码中简化而来的,我试图在连接到子进程的 async_pipe 上执行 async_read。在子进程中,我调用“ls”。作为一个测试,我希望我的异步读取能够得到结果。它返回以下内容

$ ./a.out
system:0
0

我不明白为什么会发生这种情况?理想情况下,我想替换“ls”。在一个长时间运行的过程中,我可以使用 async_read 逐行阅读。

#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream>
#include <fstream>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <boost/process.hpp>

namespace bp = boost::process;

class test {
private:
boost::asio::io_service ios;
boost::asio::io_service::work work;
bp::async_pipe ap;
std::vector<char> buf;

public:
test()
: ios(), work(ios), ap(ios) {
}

void read(
const boost::system::error_code& ec,
std::size_t size) {
std::cout << ec << std::endl;
std::cout << size << std::endl;
}

void run() {
bp::child c(bp::search_path("ls"), ".", bp::std_out > ap);
boost::asio::async_read(ap, boost::asio::buffer(buf),
boost::bind(&test::read,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));

ios.run();
}
};

int main() {
test c;
c.run();
}

最佳答案

您读入了一个大小为 0 的 vector 。

您读取了 0 个字节。这就是您的要求。

我建议使用 streambuf 并只读到 EOF。此外,除非您真的希望 run() 永远不返回,否则请放弃 work:

Live On Coliru

#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/process.hpp>
#include <iostream>

namespace bp = boost::process;

class test {
private:
boost::asio::io_service ios;
bp::async_pipe ap;
boost::asio::streambuf buf;

public:
test() : ios(), ap(ios) {}

void read(const boost::system::error_code &ec, std::size_t size) {
std::cout << ec.message() << "\n";
std::cout << size << "\n";
std::cout << &buf << std::flush;
}

void run() {
bp::child c(bp::search_path("ls"), ".", bp::std_out > ap, ios);

async_read(ap, buf, boost::bind(&test::read, this, _1, _2));

ios.run();
}
};

int main() {
test c;
c.run();
}

打印,例如

End of file
15
a.out
main.cpp

关于c++ - async_pipe 子进程上的 async_read 不提供任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47614793/

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