Поделиться через


Создание представления файлов

Чтобы сопоставить данные из файла с виртуальной памятью процесса, необходимо создать представление файла. Функции MapViewOfFile и MapViewOfFileEx используют дескриптор объекта сопоставления файлов, возвращаемый командой CreateFileMapping , для создания представления файла или части файла в виртуальном адресном пространстве процесса. Эти функции завершаются ошибкой, если флаги доступа конфликтуют с флагами, указанными при создании объекта сопоставления файлов CreateFileMapping .

Функция MapViewOfFile возвращает указатель на представление файла. Разыменовав указатель в диапазоне адресов, указанных в MapViewOfFile, приложение может считывать данные из файла и записывать данные в файл. Запись в представление файла приводит к изменениям в объекте сопоставления файлов. Фактическая запись в файл на диске обрабатывается системой. Данные фактически не передаются во время записи объекта сопоставления файлов. Вместо этого большая часть входных и выходных данных файлов кэшируется для повышения общей производительности системы. Приложения могут переопределить это поведение, вызвав функцию FlushViewOfFile , чтобы система немедленно выполняла транзакции на диске.

Функция MapViewOfFileEx работает точно так же, как и функция MapViewOfFile , за исключением того, что она позволяет процессу указать базовый адрес представления файла в виртуальном адресном пространстве процесса в параметре lpvBase . Если по указанному адресу недостаточно места, вызов завершается ошибкой. Таким образом, если необходимо сопоставить файл с одинаковым адресом в нескольких процессах, процессы должны согласовать соответствующий адрес: параметр lpvBase должен быть целочисленным кратным степени детализации выделения памяти в системе, иначе вызов завершается ошибкой. Чтобы получить степень детализации выделения памяти в системе, используйте функцию GetSystemInfo , которая заполняет элементы структуры SYSTEM_INFO .

Приложение может создать несколько представлений файлов из одного объекта сопоставления файлов. Размер представления файла может отличаться от размера объекта сопоставления файлов, от которого оно является производным, но оно должно быть меньше, чем объект сопоставления файлов. Смещение, заданное параметрами dwOffsetHigh и dwOffsetLowMapViewOfFile , должно быть кратно степени детализации распределения в системе.

Создание представления в файле