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

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

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

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

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

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

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

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

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