对于此处发布的代码长度,我深表歉意。我正在尝试创建一个类,该类使用 boost::process 来生成一个进程,在其 stdin 上为其提供一些数据并捕获其所有 stdout 和 stderr。
子进程的标准输入可能和标准输出一样冗长;目标机器没有大量内存,因此每个都需要分块处理。
我已经阅读了无数使用 boost::process 的例子,但没有发现任何可以一起回答所有这些问题的例子。我曾尝试将这些例子结合起来,但没有成功。我显然错过了一些东西。我将不胜感激任何帮助。
发生的情况是子进程成功生成但没有任何反应。父进程在标记为 THUS *的行上停止。
类定义:
class CommandProcessor {
public:
explicit CommandProcessor(const std::string &executable_path, bool slow) :
executable_path_(executable_path), slow_(slow), in_(io_service_, ::dup(STDIN_FILENO)), out_(io_service_, ::dup(STDOUT_FILENO)), err_(io_service_, ::dup(STDERR_FILENO)) {
}
private:
void begin_write_stdin();
void end_write_stdin(const boost::system::error_code &ec, std::size_t bytes_transferred);
void begin_read_stdout();
void end_read_stdout(const boost::system::error_code &ec, std::size_t bytes_transferred);
void begin_read_stderr();
void end_read_stderr(const boost::system::error_code &ec, std::size_t bytes_transferred);
public:
void execute_command(const Command& command);
private:
boost::filesystem::path executable_path_;bool slow_;
boost::asio::io_service io_service_;
boost::asio::posix::stream_descriptor in_;
boost::asio::posix::stream_descriptor out_;
boost::asio::posix::stream_descriptor err_; …Run Code Online (Sandbox Code Playgroud)