int msgctl (int msqid, int cmd, struct msqid_ds *buf);
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.