簡體   English   中英

創建一個子進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM