天天看點

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參數,用于子程序執行後自動退出,非必須但推薦