2013-04-17 28 views
1

我有一個關於Windows管道的問題。在ReadFile功能手冊寫的是:匿名管道的ReadFile函數

如果正在使用匿名管道和寫句柄已關閉,當ReadFile的嘗試使用管道的相應的讀句柄讀取,該函數返回FALSE和GetLastError返回ERROR_BROKEN_PIPE。

讓我們假設從管道讀取每秒發生一次。從上次讀取操作發生以下情況:寫入管道操作並關閉寫入處理程序。根據上面的手冊,函數返回錯誤 - 讀取操作失敗。我的問題未讀取的數據會發生什麼?我如何得到它們?

回答

1

正如你可能想到,之後的數據已投入管道,你可以讀出來,直至到達數據的結尾,然後閱讀將失敗。

+0

所以,當'ReadFile'返回錯誤'ERROR_BROKEN_PIPE'錯誤。這並不意味着函數失敗,這意味着它完成了它的工作(從管道讀取最後一個數據)? – user14416

+1

@ user14416:是的 - 如果您(例如)產生寫入某個輸出然後退出的孩子,則預計您將讀取數據,然後獲取ERROR_BROKEN_PIPE。當然,它*也可能意味着孩子墜毀,或者按照該順序。 –

+0

我相信對ReadFile的調用將從管道獲取最後的數據,並且下一次調用將返回ERROR_BROKEN_PIPE。換句話說,錯誤被推遲到管道是空的。 –