msgctl - выполняет контрольные операции над сообщениями
НАЗВАНИЕmsgctl - выполняет контрольные операции над сообщениями
СИНТАКСИС
#include
#include
#include
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
ОПИСАНИЕ
Эта функция выполняет контрольную операцию, заданную в
cmd, над очередью сообщений msqid. Возможные значения
cmd:
IPC_STAT Скопировать информацию из структуры данных
очереди сообщений в структуру с адресом buf
(причем, у пользователя должны быть права на
чтение очереди сообщений).
IPC_SET Записать значения некоторых элементов
структуры msqid_ds , адрес которой указан в
buf, в структуру данных из очереди сообщений,
обновляя при этом его поле msg_ctime.
Предполагаемые элементы заданной пользователем
структуры struct msqid_ds, адрес которой
указан в buf, являются следующими:
msg_perm.uid
msg_perm.gid
msg_perm.mode /* только неосновные 9 битов */
msg_qbytes
Эффективный идентификатор пользователя
процесса, вызывающего эту функцию, должен
принадлежать либо root, либо создателю или
владельцу очереди сообщений. Только
суперпользователь может устанавливать значение
msg_qbytes большим, чем MSGMNB.
IPC_RMID Немедленно удалить очередь сообщений и
структуры его данных, "разбудив" все процессы,
ожидающие записи или чтения этой очереди (при
этом функция возвращает ошибку, а переменная
errno приобретает значение EIDRM).
Эффективный идентификатор пользователя
процесса, вызывающего эту функцию, должен
принадлежать либо root, либо создателю или
владельцу очереди сообщений.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При удачном завершении вызова возвращаемое значение равно
нулю. При ошибке возвращается -1, а переменной errno
присваивается номер ошибки.
КОДЫ ОШИБОК
EACCES Значение параметра cmd равно IPC_STAT , но у
вызывающего процесса нет прав на чтение очереди
сообщений msqid.
EFAULT Значение параметра cmd равно IPC_SET или
IPC_STAT, но адрес, указанный в buf недоступен.
EIDRM Очередь сообщений удалена.
EINVAL Задано неправильное значение cmd или msqid.
EPERM Значение параметра cmd равно IPC_SET или
IPC_RMID , но эффективный пользователь
вызывающего процесса не имеет достаточного
количества прав для выполнения команды. Эта
ошибка также возвращается в том случае, если
не-root процесс пытается увеличить количество
msg_qbytes так, что оно превышает системный
параметр MSGMNB.
ЗАМЕЧАНИЯ
Контрольные вызовы IPC_INFO, MSG_STAT и MSG_INFO
посылаются программой ipcs(8) для получения информации об
используемых ресурсах. В будущем эти функции могут быть
изменены или перенесены в интерфейс файловой системы proc.
Многие поля в структуре struct msqid_ds Linux 2.2 были
короткими, в версии 2.4 они стали длиннее. Для
эффективного применения этого необходима перекомпиляция
версии в glibc-2.1.91 или более позднюю версию. (Ядро
различает старые и новые вызовы по флагу IPC_64 в
аргументе cmd.)
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, SVID. SVID не описывает код ошибки EIDRM.