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


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

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

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

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

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

Hosted by uCoz