Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Reference > M


HP-UX 11i Version 3: February 2007

Technical documentation

» Feedback
Content starts here

 » Table of Contents

 » Index


msgget — get message queue


#include <sys/msg.h>

int msgget(key_t key, int msgflg);


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.


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.


msgget() fails if one or more of the following is true:


A message queue identifier exists for key, but operation permission as specified by the low-order 9 bits of msgflg would not be granted.


A message queue identifier does not exist for key and (msgflg & IPC_CREAT) is "false".


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.


A message queue identifier exists for key but ((msgflg & IPC_CREAT) && (msgflg & IPC_EXCL)) is "true".


msgget(): SVID2, SVID3, XPG2, XPG3, XPG4

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 1983-2007 Hewlett-Packard Development Company, L.P.