Win32 выбрать / опрос / eof / НИЧЕГО? - PullRequest
5 голосов
/ 28 мая 2010

Используя стандартный интерфейс ввода-вывода Win32 API (CreateFile / ReadFile / и т. Д.), Я пытаюсь дождаться, пока файл станет читаемым, или возникнет исключение в файле. Если бы у 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 таким образом. Но тогда я должен был бы обработать чтение в тот момент времени - я надеюсь, что смогу просто выяснить, что файл является читаемым, фактически не читая его.

Какие у меня варианты?

Ответы [ 2 ]

7 голосов
/ 28 мая 2010

Windows имеет совершенно другую архитектуру для асинхронного ввода-вывода.Вам нужно будет использовать перекрывающийся ввод-вывод с или без связанных портов завершения ввода-вывода .

Обратите внимание, что стандартный интерфейс Winsock имеет POSIX-подобныйselect(), но работает только с сетевыми сокетами.

1 голос
/ 12 августа 2016

Я отвечаю шесть лет спустя, все идет так: я нашел WSAPoll похожим на опрос * nix. Здесь ссылка на MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/ms741669(v=vs.85).aspx Я был добавлен в Vista и более поздние версии и работает с сокетами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...