NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |STANDARDS |HISTORY |NOTES |BUGS |SEE ALSO |COLOPHON | |
msgget(2) System Calls Manualmsgget(2)msgget - get a System V message queue identifier
Standard C library (libc,-lc)
#include <sys/msg.h>int msgget(key_tkey, intmsgflg);
Themsgget() system call returns the System V message queue identifier associated with the value of thekey argument. It may be used either to obtain the identifier of a previously created message queue (whenmsgflg is zero andkey does not have the valueIPC_PRIVATE), or to create a new set. A new message queue is created ifkey has the valueIPC_PRIVATEorkey isn'tIPC_PRIVATE, no message queue with the given keykey exists, andIPC_CREATis specified inmsgflg. Ifmsgflg specifies bothIPC_CREATandIPC_EXCLand a message queue already exists forkey, thenmsgget() fails witherrno set toEEXIST. (This is analogous to the effect of the combinationO_CREAT | O_EXCLforopen(2).) Upon creation, the least significant bits of the argumentmsgflg define the permissions of the message queue. These permission bits have the same format and semantics as the permissions specified for themode argument ofopen(2). (The execute permissions are not used.) If a new message queue is created, then its associated data structuremsqid_ds (seemsgctl(2)) is initialized as follows: •msg_perm.cuid andmsg_perm.uid are set to the effective user ID of the calling process. •msg_perm.cgid andmsg_perm.gid are set to the effective group ID of the calling process. • The least significant 9 bits ofmsg_perm.mode are set to the least significant 9 bits ofmsgflg. •msg_qnum,msg_lspid,msg_lrpid,msg_stime, andmsg_rtime are set to 0. •msg_ctime is set to the current time. •msg_qbytes is set to the system limitMSGMNB. If the message queue already exists the permissions are verified, and a check is made to see if it is marked for destruction.
On success,msgget() returns the message queue identifier (a nonnegative integer). On failure, -1 is returned, anderrno is set to indicate the error.
EACCESA message queue exists forkey, but the calling process does not have permission to access the queue, and does not have theCAP_IPC_OWNERcapability in the user namespace that governs its IPC namespace.EEXIST IPC_CREATandIPC_EXCLwere specified inmsgflg, but a message queue already exists forkey.ENOENTNo message queue exists forkey andmsgflg did not specifyIPC_CREAT.ENOMEMA message queue has to be created but the system does not have enough memory for the new data structure.ENOSPCA message queue has to be created but the system limit for the maximum number of message queues (MSGMNI) would be exceeded.
POSIX.1-2008.
POSIX.1-2001, SVr4.Linux Until Linux 2.3.20, Linux would returnEIDRMfor amsgget() on a message queue scheduled for deletion.
IPC_PRIVATEisn't a flag field but akey_t type. If this special value is used forkey, the system call ignores everything but the least significant 9 bits ofmsgflg and creates a new message queue (on success). The following is a system limit on message queue resources affecting amsgget() call:MSGMNISystem-wide limit on the number of message queues. Before Linux 3.19, the default value for this limit was calculated using a formula based on available system memory. Since Linux 3.19, the default value is 32,000. On Linux, this limit can be read and modified via/proc/sys/kernel/msgmni.
The name choiceIPC_PRIVATEwas perhaps unfortunate,IPC_NEWwould more clearly show its function.
msgctl(2),msgrcv(2),msgsnd(2),ftok(3),capabilities(7),mq_overview(7),sysvipc(7)
This page is part of theman-pages (Linux kernel and C library user-space interface documentation) project. Information about the project can be found at ⟨https://www.kernel.org/doc/man-pages/⟩. If you have a bug report for this manual page, see ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. This page was obtained from the tarball man-pages-6.15.tar.gz fetched from ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on 2025-08-11. If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up- to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgLinux man-pages 6.15 2025-05-17msgget(2)Pages that refer to this page:ipcrm(1), ipc(2), msgctl(2), msgop(2), syscalls(2), umask(2), ftok(3), mq_overview(7), sysvipc(7)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |