2 つの子プロセスを作成し、継承されたパイプをそれぞれ待機し、出力をファイルに入れる単純なプログラム (C) があります。
2 つのパイプでの書き込み/読み取りサイクルの後、子プロセスが終了すると、ReadFile ブロックの呼び出しがパイプでデータを待機することを除いて、すべてが正常に機能します。私は次のパターンを使用します。
...
//create pipe1
CreatePipe(&hReadDup,&hWrite,&saAttr,0);
DuplicateHandle(GetCurrentProcess(),hReadDup,GetCurrentProcess(),&hRead,0,FALSE,DUPLICATE_SAME_ACCESS);
CloseHandle(hReadDup);
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hWrite;
CreateProcess( NULL,
const_cast<LPWSTR>(cmd2.c_str()), //the command to execute
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si, //si.
&pi
);
...
CloseHandle(hWrite); // EDIT: this was the operation not properly done!
while(cont){
...
cont = ReadFile(hRead,buf,50, &actual,NULL);
...
}
...
最後の呼び出し (子プロセスの終了後) ブロック。理由のアイデア (そうでない場合は、これをデバッグする方法)?