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 присваивает- ся код ошибки.