此代码基于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(' '); printf(processOutput.data()); } if (error.valid()) { auto processError = error.get(); processError.push_back(' '); printf(processError.data()); } return 0; }
它按预期工作。 它运行hostname.exe并打印其输出,即您的计算机networking名称。
您可能会看到errorvariables未被使用。 读也stderr是逻辑的,即使hostname.exe通常不使用它,实际的subprocess当然可以使用它。 用boost::process::std_err > errorreplaceboost::process::std_err > boost::process::null看起来微不足道。 但是,这会导致崩溃。 错误消息如下所示:
vector iterator not dereferencable
有谁知道的原因,如何绕过这个错误?
C ++程序的单个实例,使用boost :: interprocess
如何捕捉不是从你的线程抛出?
C ++ Boost为两个不同的进程创build共享内存
在Winx64中使用Boost :: asio:我卡住了,需要弄清楚如何为x64构buildlibboost_system_xxxx.lib
使用boost python的python模块是空的?
如何使用BCP提取可以构build的Boost的子集?
在Windows 7上使用boost来设置Clion
在新鲜的下载提升中缺lessJam文件
具有细粒度锁的线程安全链接列表
batch file不可执行不像shell脚本?
这是Boost过程中的一个错误。 崩溃出现在includeboostprocessdetailwindowsasync_out.hpp导致崩溃的代码如下:
arg.resize(buffer->size()); is.read(&*arg.begin(),buffer->size());
我们重定向std_err还是std_out并不重要。 当流不生成任何输出时出现问题。 对于hostname.exe它是std_err ,但是,如果您尝试运行pyw.exe ,您也会得到std_out这个错误。
当progam不产生输出时, buffer->size()返回0,所以vector变成空的。 它看起来像尝试解引用空向量导致崩溃(调试断言)在Visual C ++。
修复如下:
auto bufferSize = buffer->size(); if (bufferSize) { arg.resize(buffer->size()); is.read(&*arg.begin(),buffer->size()); }
我没有提交这个错误报告来提振,如果有人有时间,让他这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。