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''.
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