Win32 select/poll/eof/ANYTHING?

And*_*rew 5 c++ winapi mfc visual-studio

使用标准的Win32文件I/O API(CreateFile/ReadFile/etc),我试图等待文件变得可读,或者在文件上发生异常.如果Windows有任何不错的POSIX支持,我可以这样做:

select(file_count, files_waiting_for_read, NULL, files_waiting_for_excpt, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

当某些文件有任何有趣之处时,select将返回.Windows不支持select或poll.精细.我想我可以把文件做成像:

while(eof(file_descriptor))
{
    Sleep(100);
}
Run Code Online (Sandbox Code Playgroud)

当有更多数据可供读取时,上述循环将退出.但不,Windows也没有相当于eof()!我可以在文件上调用ReadFile(),并确定它是否在那个方面.但是,那时我必须处理读数 - 我希望能够简单地弄清楚文件是否可读,而不是实际读取它.

我有什么选择?

Gre*_*ill 7

Windows具有完全不同的异步I/O架构.您将需要使用重叠I/O使用或不相关的I/O完成端口.

请注意,标准Winsock接口确实具有类似POSIX的select()功能,但仅适用于网络套接字.

  • @Andrew,Windows不符合POSIX标准. (2认同)