2011-10-23 146 views
0

我試圖在命令行shell和我的應用程序之間創建一個管道。標準輸入/輸出重定向,輸入不工作

這是我到目前爲止的代碼: http://pastebin.com/uupd4aXi

我所試圖做的是寫「WHOAMI」到標準輸入和獲得回報等同於命令。 如果我註釋掉writeInput函數,readoutput將成功打印標準cmd打印輸出。但是,如果我不這樣做,writeinput卡住在一個無限循環的:

for (;;) 
    { 

     bSuccess = WriteFile(hSTD_IN_WRITE, chBuf, sizeof(chBuf), &dwWritten, NULL); 
     if (! bSuccess) break; 
    } 

如果我刪除if語句和手動造成環路休息,我仍然只得到CMD打印輸出消息,但不響應我的命令「whoami」。

我在做什麼錯?

回答

1

您正陷入redirecting both stdin and stout but processing them serially的陷阱。

如果您只想運行whoami程序並捕獲輸出,則不需要cmd.exe並嘗試將whoami.exe作爲其輸入。直接運行whoami.exe並捕獲其輸出。

+0

感謝您的迴應,但不幸的是,命令「whoami」只是一個例子,所以我不能只運行whoami.exe,如果我想讓「回聲1」的結果可以說會發生什麼。那篇文章是使用緩衝,但是,我不完全明白這是什麼意思,你能幫我一下嗎? –

+0

'cmd.exe/c echo 1'會運行命令,而不需要你通過stdin輸入數據。它也擺脫了旗幟,所以一石二鳥。 –

+0

謝謝!終於搞定了。雖然這在我看來似乎是一種解決方法,但它確實能完成這項工作。我會很好奇,但要找到「正確」的方法 –