Функция ReadFileScatter


Функция ReadFileScatter читает данные из файла и хранит данные в массиве буферов.

Функция начинает чтение данных из файла в позиции, заданной структурой OVERLAPPED. Она работает асинхронно.

Синтаксис

BOOL ReadFileScatter(
  HANDLE hFile,                          // дескриптор файла 
  FILE_SEGMENT_ELEMENT aSegmentArray[ ], // указатель на массив буферов
  DWORD nNumberOfBytesToRead,            // число читаемых байтов
  LPDWORD lpReserved,                    // резерв; должен быть нуль
  LPOVERLAPPED lpOverlapped              // структура OVERLAPPED
);

Параметры

hFile

[in] Дескриптор файла, в котором происходит чтение.

Этот дескриптор файла, должен быть создан с правом GENERIC_READ , а так же с флажками FILE_FLAG_OVERLAPPED и FILE_FLAG_NO_BUFFERING. Подробную информацию о правах доступа, см. в статье Защита файла и права доступа.

aSegmentArray

[in] Указатель на массив буферов FILE_SEGMENT_ELEMENT, который принимает данные. Каждый элемент может принять одну страницу данных (чтобы выяснить размер системной страницы, используйте функцию GetSystemInfo. Массив должен содержать достаточное количество элементов, чтобы сохранить nNumberOfBytesToWrite байтов данных, плюс один член для конечного NULL- указателя. Например, если число байтов для чтения - 40 КБ, а размер системы страницы  - 4 КБ, то этот массив должен иметь 10 членов для данных, плюс один член структуры для конечного пустого члена, общее количество - 11 членов структуры.

Каждый буфер должен быть по крайней мере размером со страницу системной памяти и должен выравниваться по границе размера этой страницы. Система будет читать по одной странице системной памяти данных в каждый буфер.

Функция сохраняет данные в буфере последовательным способом: она сохраняет данные в первом буфере, затем - во втором, затем - в последующем, заполняя каждый буфер до тех пор, пока нет больше данных или нет больше буферов.

Концевой элемент массива должен быть 64-разрядным пустым указателем (NULL-указателем).

nNumberOfBytesToRead

[in] Общее количество читаемых байтов из файла. Каждый элемент aSegmentArray содержит кусок программы величиной в 1 страницу их общего количества. Поскольку файл должен открываться с флажком FILE_FLAG_NO_BUFFERING, число байтов для чтения должно быть кратным размеру сектора файловой системы, в которой постоянно находится файл.

lpReserved

[in] Этот параметр резервируется для будущего использования и должен быть NULL.

lpOverlapped

[in] Указатель на структуру данных OVERLAPPED.

Функция ReadFileScatter требует допустимой структуры OVERLAPPED. Параметр lpOverlapped  не может иметь значения NULL.

Функция ReadFileScatter начинает чтение данных из файла с позиции определенной членами Offset и OffsetHigh структуры OVERLAPPED.

Функция ReadFileScatter может возвратить значение прежде, чем закончится операция чтения. В этом случае функция ReadFileScatter возвращает значение нуль, а функция GetLastError возвращает значение ERROR_IO_PENDING. Эта асинхронная операция:  ReadFileScatter позволяет вызывающему процессу продолжать работать, в то время как операция чтения заканчивает работу. Вы можете вызвать функцию GetOverlappedResult, HasOverlappedIoCompleted или  GetQueuedCompletionStatus, чтобы получить информацию об окончании операции чтения.

Возвращаемые значения

Если функция завершается успешно, возвращаемое значение - не нуль.

Если функция завершается ошибкой, величина возвращаемого значения - нуль. Чтобы получить дополнительные данные об ошибке, вызовите функцию GetLastError.

Если функция пытается читать за пределами конца файла, функция возвращает значение нуль, а GetLastError возвращает ошибку ERROR_HANDLE_EOF.

Если функция возвращает значение прежде, чем закончится операция чтения, функция возвращает нуль, а GetLastError возвращает ошибку ERROR_IO_PENDING.

Замечания

Союз FILE_SEGMENT_ELEMENT определяется как ниже указано:

typedef union _FILE_SEGMENT_ELEMENT {
    PVOID64 Buffer;
    ULONGLONG Alignment;
}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;

Смотри также 

Обзор Управление файлами,  Функции для файлового ввода-вывода (I/O), CreateFileGetOverlappedResult, GetQueuedCompletionStatusHasOverlappedIoCompletedOVERLAPPED, ReadFile, ReadFileEx, WriteFileGather

Размещение и совместимость ReadFileScatter

К

Windows XP

Да 

л

Windows 2000 Professional

Да

и

Windows NT Workstation

Да версии 4.0 SP2 и выше

е

Windows Me

Нет

н

Windows 98

Нет

т

Windows 95

Нет

 
С

Windows Server 2003

Да

е Windows 2000 Server Да
р Windows NT Server Workstation Да версии 4.0 SP2 и выше
в    
е    
р    

Используемая библиотека

Kernel32.lib

Используемая DLL -
 Заголовочный файл  

- объявлено в

Winbase.h

 - включено в

Windows.h

 Unicode

Нет

 Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz