Использование msgctl
В статье msgct(2) Справочника программиста синтаксис данного системного вызова описан так:
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>
int msgctl (msqid, cmd, buf) int msqid, cmd; struct msqid_ds *buf;
При успешном завершении результат равен нулю; в случае неудачи возвращается -1.
В качестве аргумента msqid должен выступать идентификатор очереди сообщений, предварительно полученный при помощи системного вызова msgget(2).
Управляющее действие определяется значением аргумента cmd. Допустимых значений три:
IPC_STAT | |
Поместить информацию о состоянии очереди, содержащуюся в структуре данных, ассоциированной с идентификатором msqid, в пользовательскую структуру, на которую указывает аргумент buf. | |
IPC_SET | |
В структуре данных, ассоциированной с идентификатором msqid, переустановить значения действующих идентификаторов пользователя и группы, прав на операции, максимально допустимого числа байт в очереди. | |
IPC_RMID | |
Удалить из системы идентификатор msqid, ликвидировать очередь сообщений и ассоциированную с ней структуру данных. |
Чтобы выполнить управляющее действие IPC_SET или IPC_RMID, про- цесс должен иметь действующий идентификатор пользователя, рав- ный либо идентификаторам создателя или владельца очереди, либо идентификатору суперпользователя. Чтобы выполнить действие IPC_STAT, требуется право на чтение.