июля 04

Файлы данных, проецируемые в память

Проецирование файла данных в адресное пространство процесса предоставляет разработчику мощный механизм работы с файлами. Спроецировав файл на адресное пространство процесса, программа получает возможность работать с ним, как с массивом. Это очень удобно при манипуляциях с большими потоками данных. Для проецирования файла в память необходимо выполнить три операции:
1. Создать объект ядра «файл», идентифицирующий дисковый файл, который вы хотите использовать как проецируемый в память (функция CreateFile).
2. Создать объект ядра «проекция файла» при помощи функции CreateFileMapping. При этом используется дескриптор файла, возвращенный функцией CreateFile.
3. Указать отображение объекта «проекция файла» или его части на адресное пространство процесса (функция MapViewOfFile).
Закончив работу с проецируемым в память файлом, тоже следует выполнить три операции:
1. Отменить отображение на адресное пространство процесса объекта «проекция файла» (функция UnmapViewOfFile).
2. Закрыть объект ядра «проекция файла».
3. Закрыть объект ядра «файл».
Описанную технологию можно проиллюстрировать следующим фрагментом кода:
HANDLE hFile. hFileMapping:
PVOID pArray;
hFile = CreateFileC'File Name", ... );
hFileMapping = CreateFileMapping(hFile, ... ):
CloseHandle(hFile) :
pArray - MapViewOfFile(hFileMapping. ... );
CloseHandle(hFileMapping) ;
//
/ Работаем с файлом, как с массивом рАггау /
//
UnmapVi ewOfFi1е(pArray);
В этом примере «закрывающие» операции выполняются сразу после использования соответствующего дескриптора объекта. Это уменьшает вероятность утечки ресурсов.