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).
This command requres the
DACREAD
privilege to operate on a message queue not permitted by access modes. This
command requires the
COMMALLOWED
privilege to operate on a message queue in a different compartment.
- 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
the
OWNER
privilege or has an effective user
ID
equal to the value of either
msg_perm.uid
or
msg_perm.cuid
in the data structure associated with
msqid.
Only a user with the
LIMIT
privilege can raise the value of
msg_qbytes.
WARNING:
Programs compiled on HP-UX revisions prior to HP-UX 11i v1 use old
16-bit msqid_ds structure fields (obtained via
IPC_STAT)
which can describe queue sizes only up to 64 KBytes.
Care must be taken
such that queues shared with such programs are not made larger than
64 KBytes (65535).
Or, those existing programs should be recompiled.
Or, the system administrator should restrict the
MSGMNB
kernel tunable parameter to 64 KBytes or less.
- 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
the
OWNER
privilege or has
an effective user
ID
equal to the value of either
msg_perm.uid
or
msg_perm.cuid
in the data structure associated with
msqid.
Security Restrictions
Some or all of the actions associated with this system call are subject to
compartmental restrictions. See
compartments(5)
for more information about compartmentalization on systems that support
that feature.
Compartmental restrictions can be overridden if the process possesses the
COMMALLOWED
privilege (PRIV_COMMALLOWED).
Processes owned by the superuser may not have this privilege.
Processes owned by any user may have this privilege, depending on system
configuration.
Some or all of the actions associated with this system call require the
DACREAD,
LIMIT,
or
OWNER
privileges (PRIV_DACREAD, PRIV_LIMIT or PRIV_OWNER).
Processes owned by the superuser have these privileges.
Processes owned by other users may have one or more of these privileges,
depending on system
configuration.
See
privileges(5)
for more information about privileged access on
systems that support fine-grained privileges.
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 calling process does not have the
OWNER
privilege or
the effective user
ID
of the calling process 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 user does not have the
LIMIT
privilege.
- EFAULT
buf
points to an illegal address.
Reliable detection of this error is implementation dependent.
STANDARDS CONFORMANCE
msgctl(): SVID2, SVID3, XPG2, XPG3, XPG4