Общий доступ к файлам и памяти

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

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

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

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

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

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

Сведения о безопасности объектов сопоставления файлов см. в разделе "Безопасность сопоставления файлов и права доступа".

Создание именованной общей памяти