MSGCTL(2) MSGCTL(2)
НАЗВАНИЕ
msgctl - операции управления очередью сообщений
СИНТАКСИС
#include
#include
#include
int msgctl (msqid, cmd, buf)
int msqid, cmd;
struct msqid_ds *buf;
ОПИСАНИЕ
Системный вызов msgctl позволяет выполнять операции уп-
равления очередью сообщений. Операция определяется зна-
чением аргумента cmd, которое должно быть одним из сле-
дующих:
IPC_STAT
Поместить текущее значение каждого поля структуры
данных, ассоциированной с идентификатором очереди
сообщений msqid, в структуру, на которую указывает
buf. Содержимое структуры описано в intro(2).
{Требуется право на чтение.}
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 и нет
прав на чтение у вызывающего процесса [см.
intro(2)].
[EPERM] Значение аргумента cmd равно IPC_RMID или
IPC_SET и действующий идентификатор пользо-
вателя вызывающего процесса не равен ни
идентификатору суперпользователя, ни значе-
нию поля msg_perm.cuid или msg_perm.uid в
структуре данных, ассоциированной с msqid.
[EPERM] Значение аргумента cmd равно IPC_SET и была
предпринята попытка увеличить значение поля
msg_qbytes, а действующий идентификатор
пользователя вызывающего процесса не равен
идентификатору суперпользователя.
[EFAULT] Аргумент buf указывает за пределы отведен-
ного процессу адресного пространства.
СМ. ТАКЖЕ
intro(2), msgget(2), msgop(2).
ДИАГНОСТИКА
При успешном завершении результат равен 0; в случае
ошибки возвращается -1, а переменной errno присваивает-
ся код ошибки.
|