天天看点

CreateProcess简单方法实现子进程输出重定向

在之前的文章(CreateProcess创建子进程并重定向输出到文件)中,我们利用CreateProcess实现了子进程输出重定向。但和“使用命令行直接实现重定向”还是麻烦了一点。

命令行重定向

命令行重定向示例如下:

exe参数 > 文件名

,其中>是重定向符合

CreateProcess简单方法实现子进程输出重定向

执行效果:

CreateProcess简单方法实现子进程输出重定向

子进程重定向

有没有一种方法,可以在子进程中也直接使用命令行实现输出重定向呢?答案是肯定的,现在直接给出代码,然后再解答其中的含义。

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简单方法实现子进程输出重定向

要想使用这种方式,实现子进程重定向,需要满足以下几个条件:

  1. CreateProcess第一个参数必须是cmd.exe,并且需要给出cmd完整路径
  2. CreateProcess第二个参数是cmd的参数,在这里实现子进程调用和重定向
  3. 在第二个参数中增加/c参数,用于子进程执行后自动退出,非必须但推荐