2010-05-28 20 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