NAME
msgget — get message queue
SYNOPSIS
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
DESCRIPTION
msgget()
returns the message queue identifier associated with
key.
A message queue identifier and associated message queue
and data structure are created for
key
if one of the following is true:
key
is equal to
IPC_PRIVATE.
This call creates a new identifier, subject to available resources.
The identifier will never be returned by another call to
msgget()
until it has been released by a call to
msgctl().
The identifier should be used among the calling process and its descendents;
however, it is not a requirement.
The resource can be accessed by any process having the proper permissions.
key
does not already have a message queue identifier associated with it, and
(msgflg
& IPC_CREAT)
is "true".
On creation of a new queue, queue sizes above 64Kbytes can only be
constructed when the application is compiled with the
__BIGMSGQUEUE_ENABLED
flag defined either explicitly with a
#define
in the source or with
-D__BIGMSGQUEUE_ENABLED
at compile time.
WARNING:
Programs compiled on HP-UX revisions prior to 11i Version 1 use old
16-bit
msqid_ds
structure fields (obtained via
IPC_STAT
of the
msgctl()
system call)
which can describe queue sizes only up to 64KBytes. Care must be taken
such that queues shared with such programs are not made larger than
64KBytes (i.e., that
__BIGMSGQUEUE_ENABLED
is not specified when compiling the caller of
msgget()).
Or, those existing programs should be recompiled.
Or, the system administrator should restrict the
MSGMNB
kernel tunable parameter to 64KBytes or less.
Upon creation, the data structure associated with the new message queue
identifier is initialized as follows:
msg_perm.cuid,
msg_perm.uid,
msg_perm.cgid,
and
msg_perm.gid
are set equal to the effective user
ID
and effective group
ID,
respectively, of the calling process.
The low-order 9 bits of
msg_perm.mode
are set equal to the low-order 9 bits of
msgflg.
msg_qnum,
msg_lspid,
msg_lrpid,
msg_stime,
and
msg_rtime
are set equal to 0.
msg_ctime
is set equal to the current time.
msg_qbytes
is set equal to the system limit.
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.
See
privileges(5)
for more information about privileged access on
systems that support fine-grained privileges.
RETURN VALUE
Upon successful completion, a non-negative integer,
namely a message queue identifier, is returned.
Otherwise, a value of -1 is returned and
errno
is set to indicate the error.
ERRORS
msgget()
fails if one or more of the following is true:
- EACCES
A message queue identifier exists for
key,
but operation permission as specified by the low-order 9 bits of
msgflg
would not be granted.
- ENOENT
A message queue identifier does not exist for
key
and
(msgflg
& IPC_CREAT)
is "false".
- ENOSPC
A message queue identifier is to be created but the system-imposed limit
on the maximum number of allowed message queue identifiers system wide
would be exceeded.
- EEXIST
A message queue identifier exists for
key
but
((msgflg &
IPC_CREAT)
&&
(msgflg
&
IPC_EXCL))
is "true".
STANDARDS CONFORMANCE
msgget(): SVID2, SVID3, XPG2, XPG3, XPG4