Win32應用程序(「服務器」)通過命名管道發送連續的數據流。 GetNamedPipeInfo()告訴我輸入和輸出緩衝區大小是根據需要自動分配的。管道工作在字節模式下(儘管它發送的數據單元大於1字節(精確地說是雙精度))。通過管道處理流式數據
現在,我的問題是這樣的:我可以以某種方式驗證我的應用程序(「客戶端」)從管道讀取時是否缺少任何數據?我知道那些讀/寫操作是緩衝的,但我想如果客戶端不能夠足夠快地獲取數據,那麼緩衝區不會無限增長。我怎麼知道我是否錯過了一些東西?服務器(或管道)是否默默丟棄客戶端未及時讀取的數據?
順便說一句,我可以依賴於客戶端使用ReadFile()讀取數據的正確對齊嗎?據我瞭解,ReadFile()可能返回的字節數比指定的少,即NumberOfBytesRead < = NumberOfBytesToRead。我每次都必須檢查NumberOfBytesRead是sizeof(double)的倍數嗎?
除了尼爾的回答 - 否,對齊不能保證。您應該始終在ReadFile()返回後檢查NumberOfBytesRead值(無論您正在讀取什麼 - 管道,文件,套接字等),以便在發生部分讀取時可以讀取任何剩餘的字節。檢查sizeof(double)的倍數是錯誤的。換句話說,假設系統中的double爲8個字節,並且ReadFile()返回NumberOfBytesRead = 5,則再次調用ReadFile(),並將Buffer參數設置爲double的第6個字節的地址,並將NumberOfBytesToRead參數設置爲3. Repeat如所須 – 2009-12-17 00:59:30