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 11.11 use old
16-bit msqid_ds structure fields (obtained via
IPC_STAT
of the
msgctl(2)
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.
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