обновляется перекрывающаяся структура при использовании ReadFile?

Я учусь кое-чему на программировании win32.
Я прочитал в справочном руководстве (здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365467%28v=vs.85%29.aspx ) тот

Если lpOverlapped не равно NULL, операция чтения начинается со смещения, указанного в структуре OVERLAPPED, и ReadFile не возвращается, пока операция чтения не будет завершена. Система обновляет смещение OVERLAPPED перед возвратом ReadFile.

Однако если я позвоню ReadFile(hmyFile, &myrecord, sizeof(record_t), &n, &ov); Я вижу что значение ov.offset остаться без изменений. Как так? Где я неправильно понимаю, что указано в справочном руководстве?

Больше деталей:
Обработчик файла открывается как hmyFile = CreateFile(argv[1], GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Я не пользуюсь FILE_FLAG_OVERLAPPED

3

Решение

Как показывают комментарии, это ошибка в документации. Фактическое поведение заключается в том, что указатель файла обновляется, так же как когда lpOverlapped имеет значение NULL, а дескриптор является синхронным. Старые версии документации понимают это правильно. Следующая информация взята из июльской версии документации Platform SDK:

ReadFile функция читает данные из файла, начиная с позиции
указывается указателем файла. После того, как операция чтения была завершена,
указатель файла корректируется на количество фактически прочитанных байтов, если только
дескриптор файла создается с перекрывающимся атрибутом. […]

Если hFile не открывается с помощью FILE_FLAG_OVERLAPPED и lpOverlapped не NULL,
операция чтения начинается со смещения, указанного в ПЕРЕКРЫВАЕТСЯ состав.
ReadFile не возвращается, пока операция чтения не будет завершена.

1

Другие решения


По вопросам рекламы [email protected]