在之前的文章(CreateProcess创建子进程并重定向输出到文件)中,我们利用CreateProcess实现了子进程输出重定向。但和“使用命令行直接实现重定向”还是麻烦了一点。
命令行重定向
命令行重定向示例如下:
exe参数 > 文件名
,其中>是重定向符合
执行效果:
子进程重定向
有没有一种方法,可以在子进程中也直接使用命令行实现输出重定向呢?答案是肯定的,现在直接给出代码,然后再解答其中的含义。
int _tmain(int argc, char* argv[])
{
STARTUPINFOA si = {sizeof(STARTUPINFOA)};
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi,sizeof(pi));
char cmdParam[]= "/c E:\\code\\c++\\myproject\\vs2008\\bin\\PrintParam.exe > redirecttion.log";
BOOL ret = CreateProcessA("C:\\Windows\\System32\\cmd.exe", cmdParam, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
if ( ret )
{
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
else
{
printf("create process error :%d...\n",::GetLastError());
}
return 0;
}
执行效果:
要想使用这种方式,实现子进程重定向,需要满足以下几个条件:
- CreateProcess第一个参数必须是cmd.exe,并且需要给出cmd完整路径
- CreateProcess第二个参数是cmd的参数,在这里实现子进程调用和重定向
- 在第二个参数中增加/c参数,用于子进程执行后自动退出,非必须但推荐