boost::process::v1::std_out
// In header: <boost/process/v1/io.hpp> unspecified std_out;
此属性允许设置子进程的输出流。
注意 | |
---|---|
语义与 std_err 相同。 |
注意 | |
---|---|
|
文件 I/O 简单地将流重定向到文件,可能的文件类型如下:
boost::process::v1::filesystem::path
std::basic_string<char_type>
const char_type*
FILE*
其中 char_type
可以是 char
或 wchar_t
。
显式添加了 FILE*,因此进程可以轻松地将子进程的输出流重定向到进程的另一个输出流。 也就是说:
system("ls", std_out < stdin);
警告 | |
---|---|
如果启动进程和子进程都使用输入,则会导致未定义的行为。 |
由于 C++ 实现未提供对句柄的访问,因此像 system("ls", std_out > std::cerr)
这样的语法是不可行的。
此属性的有效表达式是:
std_out < file; std_out = file;
如相应部分所述,boost.process 库提供了一个 async_pipe 类,可用于与子进程通信。
注意 | |
---|---|
从技术上讲,async_pipe 在这里的工作方式类似于同步管道,因为库在这里没有使用 asio 实现。 但是,如果进程完成,异步操作将不会结束,因为管道仍然打开。 您可以使用带有 on_exit 的 async_close 函数来解决此问题。 |
使用管道的有效表达式如下:
std_out > pipe; std_out = pipe;
其中,pipe
的有效类型如下:
请注意,管道也可以在多个进程之间使用,如下所示:
pipe p; child c1("nm", "a.out", std_out>p); child c2("c++filt", std_in<p);
异步管道 I/O 将通信分类为由进程库自动处理异步操作。 这意味着将构造一个管道,自动启动 async_read/-write,并且子进程的结束也将关闭管道。
管道 I/O 的有效类型如下:
boost::asio::mutable_buffer
[31]
boost::asio::streambuf
std::future<std::vector<char>>
std::future<std::string>
使用管道的有效表达式如下:
std_out > buffer; std_out = buffer; std_err > buffer; std_err = buffer; (std_out & std_err) > buffer; (std_out & std_err) = buffer;
注意 | |
---|---|
|
警告 | |
---|---|
此功能需要包含 |