C++ Win32 select/poll/eof/ANYTHING?

C++ Win32 select/poll/eof/ANYTHING?,c++,visual-studio,winapi,mfc,C++,Visual Studio,Winapi,Mfc,使用标准的Win32文件I/O API的CreateFile/ReadFile/etc,我试图等待一个文件变得可读,或者等待该文件发生异常。如果Windows有任何像样的POSIX支持,我可以: select(file_count, files_waiting_for_read, NULL, files_waiting_for_excpt, NULL, NULL); 当某些文件上有任何有趣的内容时,select将返回。Windows不支持选择或轮询。好的我想我可以拿着文件做一些类似的事情: w

使用标准的Win32文件I/O API的CreateFile/ReadFile/etc,我试图等待一个文件变得可读,或者等待该文件发生异常。如果Windows有任何像样的POSIX支持,我可以:

select(file_count, files_waiting_for_read, NULL, files_waiting_for_excpt, NULL, NULL);
当某些文件上有任何有趣的内容时,select将返回。Windows不支持选择或轮询。好的我想我可以拿着文件做一些类似的事情:

while(eof(file_descriptor))
{
    Sleep(100);
}
当有更多数据可读取时,上述循环将退出。但是没有,Windows也没有等效的eof!我可能会调用该文件的ReadFile,并确定它是否在eof处。但是,我必须在那个时间点处理读取-我希望能够简单地计算出一个文件是可读的,而不是实际读取它


我的选项是什么?

Windows具有完全不同的异步I/O体系结构。您需要使用或不使用相关的


请注意,标准Winsock接口确实有一个类似POSIX的select函数,但它只适用于网络套接字。

六年后我回答这个问题:我发现WSAPoll类似于*nix poll。此处链接到MSDN:
我已添加到Vista和更高版本中,并可与套接字一起使用。

哇,我讨厌Windows。所有应该简单的事情都不是。真的没有“GetEndOfFile”类型的函数吗?我看到有一个setendofile:@Andrew,Windows不兼容POSIX。不同并不意味着低劣;显然,对于一种模型,有些事情可能更简单,而另一些则更复杂。您只需要从不同的角度考虑同样的事情,您可能需要查看GetFileSize:以找到文件的结尾。第一次点击搜索获取文件大小。