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


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

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

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

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

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

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

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

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

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