ОПИСАНИЕ
API общей памяти POSIX позволяет процессам обмениваться информацией через общую область памяти.Доступные интерфейсы:
- shm_open(3)
- Создаёт и открывает новый объект, или открывает существующий объект. Аналог open(2). Вызов возвращает файловый дескриптор, которые используется другими интерфейсами, описанными далее.
- ftruncate(2)
- Назначает размер общего объекта памяти (размер создаваемого объекта общей памяти равен нулю).
- mmap(2)
- Отображает объект общей памяти в виртуальное адресное пространство вызвавшего процесса.
- munmap(2)
- Удаляет отображение объекта общей памяти из виртуального адресного пространства вызвавшего процесса.
- shm_unlink(3)
- Удаляет объект общей памяти с заданным именем.
- close(2)
- Закрывает файловый дескриптор (выделенный shm_open(3)), когда он больше не требуется.
- fstat(2)
- Возвращает структуру stat, в которой описан объект общей памяти. Информация, возвращаемой этим вызовом: размер объекта (st_size), права (st_mode), владелец (st_uid) и группа (st_gid).
- fchown(2)
- Изменяет владельца объекта общей памяти.
- fchmod(2)
- Изменяет права на объект общей памяти.
Версии
Общая память POSIX стала доступна начиная с Linux 2.4 и glibc 2.2.Устойчивость
Объекты общей памяти POSIX являются устойчивыми на уровне ядра. Объект будет существовать до самого отключения системы или до тех пор, пока все процессы не разорвут связь с объектом, после чего он может быть удален с помощью shm_unlink(3).Компоновка
Программы, в которых используется программный интерфейс общей памяти POSIX, для компоновки с библиотекой реального времени librt должны компилироваться с помощью cc -lrt.Доступ к объектам общей памяти через файловую систему
В Linux объекты общей памяти создаются в виртуальной файловой системе (tmpfs), которая обычно монтируется в каталог /dev/shm. Начиная с ядра версии 2.6.19, в Linux поддерживается использования списков контроля доступа (ACL) для управления доступа к объектам в виртуальной файловой системе.ЗАМЕЧАНИЯ
Обычно процессы должны синхронизировать свой доступ к объекту общей памяти, например, с использованием семафоров POSIX.Общая память System V (shmget(2), shmop(2) и так далее) является старым API. POSIX предоставляет более простой и лучше спроектированный интерфейс. С другой стороны, общая память POSIX в какой-то мере менее распространена (особенно на старых системах), чем System V.