Книга: Основы программирования в Linux
shmget
shmget
Создается совместно используемая память с помощью функции shmget
:
int shmget(key_t key, size_t size, int shmflg);
Как и для семафоров, программа предоставляет key
, фактически именующий сегмент совместно используемой памяти, а функция shmget
возвращает идентификатор совместно используемой памяти, который применяется всеми последующими функциями для работы с этой областью памяти. Есть особое значение ключа IPC_PRIVATE
, создающее для процесса частную, скрытую от других совместно используемую память. Обычно вы не будете пользоваться этим значением, да и кроме всего прочего в некоторых системах Linux можете обнаружить, что такая частная разделяемая память на самом деле далеко не частная.
Второй параметр size
задает требуемый объем памяти в байтах.
Третий параметр shmflg
содержит девять флагов прав доступа, которые используются так же, как флаги режима создающихся файлов. Для создания нового сегмента совместно используемой памяти специальный бит, описываемый IPC_CREAT
, должен с помощью поразрядной операции OR
быть объединен с правами доступа. Не считается ошибкой задание флага IPC_CREAT
и передача ключа существующего сегмента совместно используемой памяти. Флаг IPC_CREAT
, если в нем нет нужды, беззвучно игнорируется.
Флаги прав доступа к совместно используемой памяти очень полезны, поскольку позволяют процессу создать совместно используемую память, в которую могут писать процессы, принадлежащие создателю этой разделяемой памяти, а процессы, созданные другими пользователями, могут только читать этот сегмент памяти. Вы можете использовать этот механизм для обеспечения эффективного доступа к данным только для чтения, поместив их в совместно используемую память без какого- либо риска их повреждения другими пользователями.
Если совместно используемая память создана успешно, shmget
вернет неотрицательное целое, идентификатор совместно используемой памяти. В случае аварийного завершения функция вернет -1.