1
我有下面的代碼,這是從我真正的代碼簡化,我試圖做一個async_read連接到子進程的async_pipe。在孩子的過程中,我打電話給「ls」。只是一個測試,我希望我的異步閱讀獲得結果。它返回以下內容async_pipe async_pipe子進程沒有給出數據
$ ./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();
}
通過'async_read_until'或'ap.read_some'這一行可以更方便地閱讀行 – sehe