2010-05-28 25 views
5

使用標準的Win32文件I/O API(CreateFile/ReadFile/etc),我試圖等待文件變得可讀,或者文件上發生異常。如果Windows有什麼像樣的POSIX支持,我可能只是做:Win32 select/poll/eof/ANYTHING?

select(file_count, files_waiting_for_read, NULL, files_waiting_for_excpt, NULL, NULL); 

而且選擇時,有什麼有趣的一些文件將返回。 Windows不支持選擇或輪詢。精細。我想我可以採取的文件,並做類似的事情:

while(eof(file_descriptor)) 
{ 
    Sleep(100); 
} 

當更多的數據可供讀取上面的循環會退出。但是不,Windows並沒有相當於eof()!我可以在文件上調用ReadFile(),並確定它是否在這種情況下。但是,那麼我不得不在那個時候處理閱讀 - 我希望能夠簡單地弄清楚一個文件是否可讀,而沒有真正閱讀它。

我有什麼選擇?

回答

7

Windows對於異步I/O具有完全不同的體系結構。無論是否有相關的I/O completion ports,您都需要使用overlapped I/O

請注意,標準Winsock接口確實具有類似POSIX的select()函數,但該函數僅適用於網絡套接字。

+1

哇,我討厭Windows。一切應該是簡單的不是。是否真的沒有'GetEndOfFile'類型的函數?我看到有一個SetEndOfFile:( – Andrew 2010-05-28 03:15:11

+2

@Andrew,Windows不符合POSIX標準 – CMircea 2010-05-28 03:18:07

+0

不同意並不意味着低劣;顯然,對於一個模型,有些事情可能更簡單,其他更復雜,你只需要考慮同一件事不同的視角 – 2010-05-28 07:40:38