HP-UX Reference (11i v2 04/09) - 2 System Calls (vol 5)

m
msgget(2) msgget(2)
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 applica-
tion 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 (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 fol-
lows:
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. Oth-
erwise, 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 max-
imum 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’’.
SEE ALSO
ipcrm(1), ipcs(1), msgctl(2), msgop(2), stdipc(3C).
Section 2194 Hewlett-Packard Company 1 HP-UX 11i Version 2: September 2004