Win32 select / poll / eof / ANYTHING?

时间:2010-05-28 03:02:14

标签: 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不支持select或poll。精细。我想我可以把文件做成像:

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

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

我有什么选择?

2 个答案:

答案 0 :(得分:7)

Windows具有完全不同的异步I / O架构。无论是否有相关overlapped I/O,您都需要使用I/O completion ports

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

答案 1 :(得分:1)

六年后我回答这里无论如何:我发现WSAPoll类似于* nix民意调查。这里链接到MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/ms741669(v=vs.85).aspx 我已添加到Vista及更高版本,并使用套接字。