next up previous contents index
Next: Программа-пример Up: Управление разделяемыми сегментами памяти Previous: Управление разделяемыми сегментами памяти   Contents   Index

Использование shmctl

В справочной статье shmctl синтаксис данного системного вызова описан так: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int shmctl (shmid, cmd, buf) int shmid, cmd; struct shmid_ds *buf; При успешном завершении результат равен нулю; в случае неудачи возвращается -1.

В качестве аргумента shmid должен выступать идентификатор разделяемого сегмента памяти, предварительно полученный при помощи системного вызова shmget.

Управляющее действие определяется значением аргумента cmd. Допустимы следующие значения:

IPC_STAT

Поместить информацию о состоянии разделяемого сегмента, содержащуюся в структуре данных, ассоциированной с идентификатором shmid, в пользовательскую структуру, на которую указывает аргумент buf.

IPC_SET

В структуре данных, ассоциированной с идентификатором shmid, переустановить значения действующих идентификаторов пользователя и группы, а также прав на операции. Нужные значения извлекаются из структуры данных, на которую указывает аргумент buf.

IPC_RMID

Удалить из системы идентификатор shmid, ликвидировать разделяемый сегмент памяти и ассоциированную с ним структуру данных.

SHM_LOCK

Удерживать в памяти разделяемый сегмент, заданный идентификатором shmid.

SHM_UNLOCK

Освободить (перестать удерживать в памяти) разделяемый сегмент, заданный идентификатором shmid.

Чтобы выполнить управляющее действие IPC_SET или IPC_RMID, процесс должен иметь действующий идентификатор пользователя, равный либо идентификаторам создателя или владельца очереди, либо идентификатору суперпользователя. Управляющие действия SHM_LOCK и SHM_UNLOCK может выполнить только суперпользователь. Для выполнения управляющего действия IPC_STAT процессу требуется право на чтение.



Alex Otwagin 2002-12-16