[英]Creating a child process
我在Windows上使用C ++創建了cmd.exe的子進程,但在讀取管道時卡住了
HANDLE parent = GetStdHandle(STD_OUTPUT_HANDLE);
char buffer[BUFSIZE];
DWORD read, written;
BOOL b = true;
for(;;)
{
b = ReadFile(g_hChildStd_OUT_Rd, buffer, BUFSIZE, &read, NULL);
if(! b || read == 0) break;
b = WriteFile(parent, buffer, read, &written, NULL);
if(! b) break;
}
它在我的控制台中打印cmd.exe的輸出,但在此循環中掛起。 我只需要弄清楚為什么它不會打破循環
您所編寫的代碼應在管道的寫入端關閉時退出,這種情況發生在管道的最后一個句柄關閉時。 如果子進程退出,則其到管道寫端的句柄將自動關閉。
您還沒有顯示出足夠的代碼對我來說是一定的,但最可能的原因是你沒有關閉您的句柄管道寫端。 如果在啟動子進程后關閉句柄,則代碼應該可以正常工作。
您的循環是無限的,因為b始終為true,因為在您的情況下ReadFile和WriteFile總是成功,並且read永遠不會為0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.