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


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

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

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

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

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

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