Книга: Основы программирования в 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.

Оглавление книги

Оглавление статьи/книги

Генерация: 1.747. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз