NAME
msgctl — message control operations
SYNOPSIS
#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
DESCRIPTION
msgctl()
provides a variety of message control operations as specified by
cmd.
The following
cmds
are available:
- IPC_STAT
Place the current value of each member of the data structure associated with
msqid
into the structure pointed to by
buf.
The contents of this structure are defined in
glossary(9).
- IPC_SET
Set the value of the following members of the data structure associated with
msqid
to the corresponding value found in the structure pointed to by
buf:
msg_perm.uid
msg_perm.gid
msg_perm.mode /* only low 9 bits */
msg_qbytes
This
cmd
can only be executed by a process that has
an effective user
ID
equal to either that of super-user or
to the value of either
msg_perm.uid
or
msg_perm.cuid
in the data structure associated with
msqid.
Only super-user
can raise the value of
msg_qbytes.
- IPC_RMID
Remove the message queue identifier specified by
msqid
from the system and destroy the message queue
and data structure associated with it.
This
cmd
can only be executed by a process that has
an effective user
ID
equal to either that of super-user or
to the value of either
msg_perm.uid
or
msg_perm.cuid
in the data structure associated with
msqid.
RETURN VALUE
Upon successful completion, a value of 0 is returned.
Otherwise, a value of -1 is returned and
errno
is set to indicate the error.
ERRORS
msgctl()
fails if one or more of the following is true:
- [EINVAL]
msqid
is not a valid message queue identifier.
- [EINVAL]
cmd
is not a valid command, or the command contains invalid parameters.
- [EACCES]
cmd
is equal to
IPC_STAT
and Read operation permission is denied to the calling process (see
message operation permissions
in
glossary(9)).
- [EPERM]
cmd
is equal to
IPC_RMID
or
IPC_SET
and the effective user
ID
of the calling process is not equal to that of a user who has
appropriate privileges
and it is not equal to the value of either
msg_perm.uid
or
msg_perm.cuid
in the data structure associated with
msqid.
- [EPERM]
cmd
is equal to
IPC_SET,
an attempt is being made to increase to the value of
msg_qbytes,
and the effective user
ID
of the calling process
is not equal to that of super-user.
- [EFAULT]
buf
points to an illegal address.
Reliable detection of this error is implementation dependent.
STANDARDS CONFORMANCE
msgctl(): SVID2, SVID3, XPG2, XPG3, XPG4