Используя стандартный API файлового ввода-вывода Win32 (CreateFile/ReadFile/etc), я пытаюсь ожидать файла для становления читаемым, или чтобы исключение произошло на файле. Если бы Windows имел достойную поддержку POSIX, то я мог бы просто сделать:
select(file_count, files_waiting_for_read, NULL, files_waiting_for_excpt, NULL, NULL);
И выбор возвратится, когда будет что-либо интересное на некоторых файлах. Windows не поддерживает выбор или опрос.Отлично. Я полагал, что мог взять файл и сделать что-то как:
while(eof(file_descriptor))
{
Sleep(100);
}
Вышеупомянутый цикл вышел бы, когда больше данных доступно, чтобы быть считанным. Но нет, Windows не имеет эквивалента eof () также! Я мог возможно назвать ReadFile () на файле и определить, является ли это в eof тот путь. Но, затем я должен был бы обработать чтение в то время - я надеюсь просто смочь выяснить, что файл читаем, на самом деле не читая его.
Каковы мои опции?
Windows имеет совершенно другую архитектуру для асинхронного ввода-вывода. Вам потребуется использовать перекрывающийся ввод-вывод с соответствующими портами завершения ввода-вывода или без них.
Обратите внимание, что в стандартном интерфейсе Winsock есть POSIX-подобная функция select ()
, но она работает только с сетевыми сокетами.