В описании MSDN указано ReadFile()
функция:
Если hFile открывается с
FILE_FLAG_OVERLAPPED
, параметр lpOverlapped должен указывать на действительную и уникальную структуруOVERLAPPED
, в противном случае функция может неверно сообщить, что операция чтения завершена.
У меня есть приложения, которые нарушают приведенную выше рекомендацию, и я хотел бы узнать серьезность проблемы. Я имею в виду, что программа использует именованный канал, который был создан с помощью FILE_FLAG_OVERLAPPED
, но читает из него, используя следующий вызов:
ReadFile(handle, &buf, n, &n_read, NULL);
Это означает, что он передает NULL
как параметр lpOverlapped
. Согласно документации, этот вызов не должен работать правильно в некоторых случаях. Я потратил много времени, пытаясь воспроизвести проблему, но мне это не удалось! Я всегда получал все данные в нужном месте в нужное время. Однако я тестировал только именованные каналы.
Кто-нибудь знает, когда я могу ожидать, что ReadFile () некорректно вернется и сообщит об успешном завершении, даже если данные еще не находятся в буфере? Что должно произойти, чтобы воспроизвести проблему? Это происходит с файлами, каналами, сокетами, консолями или другими устройствами? Должен ли я использовать определенную версию ОС? Или конкретная версия чтения (например, зарегистрируйте дескриптор порта завершения ввода-вывода)? Или конкретная синхронизация чтения и записи процессов / потоков?
Или когда это не удастся? Меня устраивает :/
Пожалуйста помоги!
С уважением, Мартин