msgget — get a message queue identifier
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>
| int
            msgget( | key_t key, | 
| int msgflg ); | 
The msgget() system call
      returns the message queue identifier associated with the
      value of the key
      argument. A new message queue is created if key has the value IPC_PRIVATE or key isn't IPC_PRIVATE, no message queue with the
      given key key exists,
      and IPC_CREAT is specified in
      msgflg.
If msgflg
      specifies both IPC_CREAT and
      IPC_EXCL and a message queue
      already exists for key, then msgget() fails with errno set to EEXIST. (This is analogous to the effect
      of the combination O_CREAT |
      O_EXCL for open(2).)
Upon creation, the least significant bits of the argument
      msgflg define the
      permissions of the message queue. These permission bits have
      the same format and semantics as the permissions specified
      for the mode
      argument of open(2). (The execute
      permissions are not used.)
If a new message queue is created, then its associated
      data structure msqid_ds (see msgctl(2)) is initialized
      as follows:
msg_perm.cuid and
            msg_perm.uid
            are set to the effective user ID of the calling
            process.
msg_perm.cgid and
            msg_perm.gid
            are set to the effective group ID of the calling
            process.
The least significant 9 bits of msg_perm.mode are set
            to the least significant 9 bits of msgflg.
msg_qnum,
            msg_lspid,
            msg_lrpid,
            msg_stime and
            msg_rtime are
            set to 0.
msg_ctime
            is set to the current time.
msg_qbytes
            is set to the system limit MSGMNB.
If the message queue already exists the permissions are verified, and a check is made to see if it is marked for destruction.
If successful, the return value will be the message queue
      identifier (a nonnegative integer), otherwise −1 with
      errno indicating the error.
On failure, errno is set to
      one of the following values:
A message queue exists for key, but the calling
            process does not have permission to access the queue,
            and does not have the CAP_IPC_OWNER capability.
A message queue exists for key and msgflg specified both
            IPC_CREAT and
            IPC_EXCL.
No message queue exists for key and msgflg did not specify
            IPC_CREAT.
A message queue has to be created but the system does not have enough memory for the new data structure.
A message queue has to be created but the system
            limit for the maximum number of message queues
            (MSGMNI) would be
            exceeded.
IPC_PRIVATE isn't a flag
      field but a key_t type. If this
      special value is used for key, the system call ignores
      everything but the least significant 9 bits of msgflg and creates a new
      message queue (on success).
The following is a system limit on message queue resources
      affecting a msgget() call:
MSGMNISystem wide maximum number of message queues: policy
            dependent (on Linux, this limit can be read and
            modified via /proc/sys/kernel/msgmni).
The name choice IPC_PRIVATE
      was perhaps unfortunate, IPC_NEW would more clearly show its
      function.
This page is part of release 3.33 of the Linux man-pages project. A
      description of the project, and information about reporting
      bugs, can be found at http://man7.org/linux/man-pages/.
| Copyright 1993 Giorgio Ciucci <giorgiocrcc.it> Permission is granted to make and distribute verbatim copies of this manual provflags the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. Added correction due to Nick Duffek <nsdbbc.com>, aeb, 960426 Modified Wed Nov 6 04:00:31 1996 by Eric S. Raymond <esrthyrsus.com> Modified, 8 Jan 2003, Michael Kerrisk, <mtk.manpagesgmail.com> Removed EIDRM from errors - that can't happen... Modified, 27 May 2004, Michael Kerrisk <mtk.manpagesgmail.com> Added notes on capability requirements Modified, 11 Nov 2004, Michael Kerrisk <mtk.manpagesgmail.com> Language and formatting clean-ups Added notes on /proc files |