MSGCTL(2) MSGCTL(2)
MSGCTL(2) MSGCTL(2)
НАЗВАНИЕ
msgctl - операции управления очередью сообщений
СИНТАКСИС
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>
int msgctl (msqid, cmd, buf) int msqid, cmd; struct msqid_ds *buf;
ОПИСАНИЕ
Системный вызов msgctl позволяет выполнять операции управления очередью сообщений. Операция определяется значением аргумента cmd, которое должно быть одним из следующих:
IPC_STAT Поместить текущее значение каждого поля структуры данных, ассоциированной с идентификатором очереди сообщений msqid, в структуру, на которую указывает buf. Содержимое структуры описано в . {Требуется право на чтение.} IPC_SET Присвоить следующим полям структуры данных, ассоциированной с идентификатором msqid, соответствующие значения, находящиеся в структуре, на которую указывает buf:
msg_perm.uid msg_perm.gid msg_perm.mode /* Только младшие 9 бит */ msg_qbytes
Это действие может выполняться только процессом, действующий идентификатор пользователя которого равен либо идентификатору суперпользователя, либо значению поля msg_perm.cuid или msg_perm.uid в структуре данных, ассоциированной с msqid. Только суперпользователь может увеличивать значение поля msg_qbytes. IPC_RMID Удалить из системы идентификатор очереди сообщений, определяемый значением msqid, ликвидировать очередь сообщений и ассоциированную с ней структуру данных. Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный либо идентификатору суперпользователя, либо значению поля msg_perm.cuid или msg_perm.uid в структуре данных, ассоциированной с msqid.
Системный вызов msgctl завершается неудачей, если выполнено хотя бы одно из следующих условий:
[EINVAL] Значение аргумента msgid не является корректным идентификатором очереди сообщений. [EINVAL] Некорректное значение аргумента cmd, определяющее выполняемое действие. [EACCES] Значение аргумента cmd равно IPC_STAT и нет прав на чтение у вызывающего процесса[см. ]. [EPERM] Значение аргумента cmd равно IPC_RMID или IPC_SET и действующий идентификатор пользователя вызывающего процесса не равен ни идентификатору суперпользователя, ни значению поля msg_perm.cuid или msg_perm.uid в структуре данных, ассоциированной с msqid. [EPERM] Значение аргумента cmd равно IPC_SET и была предпринята попытка увеличить значение поля msg_qbytes, а действующий идентификатор пользователя вызывающего процесса не равен идентификатору суперпользователя. [EFAULT] Аргумент buf указывает за пределы отведенного процессу адресного пространства.
СМ. ТАКЖЕ
, , .
ДИАГНОСТИКА
При успешном завершении результат равен 0; в случае ошибки возвращается -1, а переменной errno присваивается код ошибки.