小编Cat*_*vva的帖子

boost::process 重定向标准输入、标准输出、标准错误

对于此处发布的代码长度,我深表歉意。我正在尝试创建一个类,该类使用 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)

c++ process boost-asio spawn

5
推荐指数
0
解决办法
1447
查看次数

标签 统计

boost-asio ×1

c++ ×1

process ×1

spawn ×1