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