Совместное использование файлов и памяти


Проецируемый в память файл может применяться для совместного использования файла или памяти между двумя или несколькими процессами. Чтобы совместно использовать файл или память, все процессы должны использовать имя или дескриптор одного и того же объекта "проецируемый файл".

Чтобы совместно использовать файл, первый процесс создает или открывает файл, используя функцию CreateFile. Затем, он создает объект "проецируемый файл", используя функцию CreateFileMapping, определяя дескриптор файла и имя для объекта "проецируемый файл". Имена события, семафора, мьютекса, ждущего таймера, задания и объектов "проецируемый файл" совместно используют одно и то же пространство имен. Поэтому, функции CreateFileMapping и OpenFileMapping завершаются ошибкой, если они устанавливают имя, которое находится в использовании объектом другого типа.

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

Самый легкий способ получения дескриптора объекта "проецируемый файл", созданного первым процессом, другими процессами состоит в том, чтобы использовать функцию OpenFileMapping и установить имя объекта. Оно упоминается как имя совместно используемой памяти (named shared memory). Если объект "проецируемый файл" не имеет имени, процесс должен получить его дескриптор через посредство наследования или дублирования. Для получения дополнительной информации о наследовании и дублировании, см. раздел Наследование.

Процессы, которые совместно используют файлы или память, должны создавать представления файла, используя функцию MapViewOfFile или MapViewOfFileEx. Они должны координировать свой доступ, используя семафоры, мьютексы, события или какую-либо другую технику взаимоблокировки. Для получения дополнительной информации, см. тему Синхронизация.

Совместно используемый объект "проецируемый файл" не будет разрушен до тех пор, пока все процессы, которые используют его, не закроют свои дескрипторы связанные с этим объектом, используя функцию CloseHandle.

За информацией о защите объекта "проецируемый файл", см. статью Защита проецируемого в память файла и права доступа.

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

Hosted by uCoz