poco中的进程使用的纠结

Poco库提供了方便的进程创建接口,允许子进程与父进程通过标准流通信,但强制重定向到父进程控制台,导致子进程依赖父进程且控制台管理复杂。在配置文件和字符编码支持上也存在不足,可能需要重新评估该库的适用性。
摘要由CSDN通过智能技术生成

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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值