編程寫了個獲取cmd回傳資訊的程式,由于回傳資訊很短所以想著只讀取一次管道就把資料讀完,后來發現這樣做很容易錯。
以ipc連接為例,使用錯誤的用戶名密碼連接時回傳
////////////////////////
發生系統錯誤 1326。
登錄失敗: 未知的用戶名或錯誤密碼。
/////////////////////////
關鍵代碼如下中間略有省略
while(true)
{
...
memset(buffer,0,256);//此處下了個斷點:斷點1
ReadFile(hRead,buffer,256,&bytesRead,NULL);
printf("%s",buffer);
...
}
每次F5除錯在斷點1停下,略等小會再F5就能得到正常的值,如下
+buffer 0x0037f378 "發生系統錯誤 1326。\r\n\r\n登錄失敗: 未知的用戶名或錯誤密碼。\r\n\r\n" char[256]
這是正常的情況(從vs2012除錯中直接復制過來的)
但如果把斷點去掉,直接運行每次從管道讀取到的資料就變成如下了
+buffer 0x0014f190 "發生系統錯誤 1326。\r\n" char[256]
只能讀取到一部分。
現在我將程式改成以下形式了
//////////////////////////////////////////////
char buffer[256] = {0};
string strOutput="";
DWORD bytesRead;
while (true)
{
memset(buffer,0,256);
if (ReadFile(hRead,buffer,256,&bytesRead,NULL) == NULL) //讀取管道
break;
strOutput += buffer;
}
////////////////////////////////////////////
現在就想問問,為什么會出現這種只能讀取部分資料的現象?是管道設定問題還是程式邏輯哪有問題?求大牛解答
uj5u.com熱心網友回復:
不知有沒有高手指點迷津?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/132759.html
標籤:網絡及通訊開發
