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


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

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

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

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

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

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

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

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

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