msgctl
------
int msgctl (int msqid, int cmd, struct msqid_ds *buf);
* msqid : id obtained by a call to msgget.
* buf : allocated by user for reading/writing info.
* cmd : IPC_STAT, IPC_SET, IPC_RMID (Note:syscalls).
IPC_STAT results in the copy of the queue data structure into the
user supplied buffer.
In the case of IPC_SET, the queue size (`msg_qbytes') and the `uid',
`gid', `mode' (low 9 bits) fields of the `msg_perm' struct are set from
the user supplied values. `msg_ctime' is updated.
Note that only the super user may increase the limit on the size of a
message queue beyond MSGMNB.
When the queue is destroyed (IPC_RMID), the sequence number is
incremented and all waiting readers and writers are awakened. These
processes will then return with `errno' set to EIDRM.
Errors:
EPERM : Insufficient privilege to increase the size of the queue
(IPC_SET) or remove it (IPC_RMID).
EACCES : Do not have permission for reading the queue (IPC_STAT).
EFAULT : buf not accessible (IPC_STAT, IPC_SET).
EIDRM : msg queue was removed.
EINVAL : invalid cmd, msqid < 0 or unused.