【发布时间】:2017-11-29 13:57:48
【问题描述】:
此代码基于boost::process 1.65.1 示例,修复了一些拼写错误:
#include <boost/process.hpp>
int main(int argc, char *argv[])
{
boost::asio::io_service ios;
std::future<std::vector<char>> output, error;
boost::process::child c("hostname.exe",
boost::process::std_out > output,
boost::process::std_err > boost::process::null,
ios);
ios.run();
c.wait();
if (output.valid())
{
auto processOutput = output.get();
processOutput.push_back('\0');
printf(processOutput.data());
}
if (error.valid())
{
auto processError = error.get();
processError.push_back('\0');
printf(processError.data());
}
return 0;
}
它按预期工作。它运行hostname.exe 并打印其输出,即。 e.您的计算机网络名称。
您可能会看到 error 变量未使用。读stderr也是合乎逻辑的,即使hostname.exe通常不使用它,现实的子进程当然可以使用它。将boost::process::std_err > boost::process::null 替换为boost::process::std_err > error 看起来很简单。但是,它会导致崩溃。错误信息如下:
vector iterator not dereferencable
有谁知道原因以及如何绕过这个错误?
【问题讨论】:
-
我实际上已经找到了修复。修复需要编辑 boost hpp 文件之一。这是boost bug,希望官方尽快修复。