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