Файлы, проецируемые в память
DWORD dwDesiredAccess, // тип доступа
DWORD dwFileOffsetHigh, // смещение от начала файла (старшее слово)
DWORD dwFileOffsetLow, // смещение от начала файла (младшее слово)
DWORD dwNumberOfBytesToMap // количество отображаемых из файла байт );
Эта функция отображает необходимое число страниц в виртуальном адресном пространстве вызвавшего ее процесса на указанный участок файла и возвращает виртуальный адрес начала участка памяти, на который выполнено отображение. После этого отображенный участок файла рассматривается как страничный файл подкачки и доступ к его содержимому производится аналогично доступу к виртуальной памяти. Функция MapViewOfFileEx работает аналогично, но позволяет отобразить файл в виртуальную память с адреса, указанного приложением. Если отображение больше не нужно, его следует отменить при помощи функции UnmapViewOfFile. Эта функция перед удалением объекта ядра отображение файла записывает измененные страницы в файл.
Другой процесс может получить доступ к файлу, отображенному в виртуальную память при помощи функции OpenFileMapping, передав ей в качестве одного из параметров ASCIIZ-строку – имя отображаемого файла. Как уже отмечалось выше, это имя, под которым отображенный файл известен в системе, и оно не имеет никакого отношения к имени файла во внешней памяти. Функция OpenFileMapping должна использоваться вместо функции CreateFileMapping любым процессом, желающим получить доступ к отображенному на память файлу, но не открывающим этот файл.
Windows использует еще несколько способов для обмена данными между приложениями, в частности каналы передачи данных Pipe и почтовые ящики Mailslot, а также механизмы OLE. Рассмотрение этих вопросов лежит за рамками данного пособия, однако следует отметить, что любые механизмы обмена данными между процессами неявным образом основаны на отображении файлов в виртуальную память.Отметим также, что ОС при помощи рассматриваемого механизма проецирует в виртуальную память содержимое сегментов кода и данных загрузочных модулей приложений при их запуске. При этом в страничный файл подкачки помещаются только копии тех страниц, которые модифицируются приложением. Это позволяет существенно уменьшить объем страничного файла подкачки.
предыдущая