poco中的进程使用的纠结

poco中的进程创建给予了很方便的接口:

std::string cmd("test.exe");  
std::vector<std::string> args;  
Poco::ProcessHandle ph = Process::launch(cmd, args);

只要给出文件名和命令行参数(一个vector<string>,内容可为空),即可创建进程运行.

这个接口有个特点:

static ProcessHandle launch(
    const std::string & command, //命令行命令,即文件名
    const Args & args,  //命令的参数
    const std::string & initialDirectory, //在该目录下创建进程
    Pipe * inPipe,  //该进程标准输入流
    Pipe * outPipe,  //该进程标准输出流
    Pipe * errPipe,  //该进程标准错误输出流
    const Env & env  
);

这是该接口完整的形式,其它重载最后都会把其它参数用默认值填上.

对于最后三个参数,该接口允许把新创建的子进程的三个标准流重定向到另一个流中,这个流可以是C++的任意输入输出流,即可以重定向到父进程创建的流中,通过一些库,甚至可以把网络也做为一个流,这是一个很有意思的功能,子进程可以很方便的与父进程进行通信,


但是这个重定向却有一个不能让人接受的地方:它肯定会重定向到父进程中...

当没有指定重定向时,如果父进程本身有控制台,则自动重定向到该控制台,即使父进程没有控制台,他也会利用GetConsoleWindow函数获取父进程控制台的句柄,即使看不到控

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值