Seth Woolley's Man Viewer

msgget(2) - msgget, msgget - get a message queue identifier - man 2 msgget

([section] manual, -k keyword, -K [section] search, -f whatis)
man plain no title

MSGGET(2)                  Linux Programmer's Manual                 MSGGET(2)

       msgget - get a message queue(1,3) identifier

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>

       int msgget(key_t key, int msgflg);

       The  function  returns the message queue(1,3) identifier associated with the
       value of the key argument.  A new message queue(1,3) is created if(3,n)  key  has
       the  value  IPC_PRIVATE or key isn't IPC_PRIVATE, no message queue(1,3) with
       the given key key exists, and IPC_CREAT is asserted  in(1,8)  msgflg  (i.e.,
       msgflg&IPC_CREAT  is  nonzero).   The  presence in(1,8) msgflg of the fields
       IPC_CREAT and IPC_EXCL plays the same role, with respect to  the  exis-
       tence  of  the  message queue(1,3), as the presence of O_CREAT and O_EXCL in(1,8)
       the mode argument of the open(2,3,n)(2) system call: i.e. the msgget  function
       fails if(3,n) msgflg asserts both IPC_CREAT and IPC_EXCL and a message queue(1,3)
       already exists for key.

       Upon creation, the lower 9 bits  of  the  argument  msgflg  define  the
       access(2,5)  permissions  of  the message queue.  These permission bits have
       the same format and semantics as the access(2,5)  permissions  parameter  in(1,8)
       open(2,3,n)(2)  or  creat(2)  system  calls.  (The execute permissions are not

       If a new message queue(1,3) is created, the system call initializes the sys-
       tem message queue(1,3) data structure msqid_ds as follows:

              msg_perm.cuid  and msg_perm.uid are set(7,n,1 builtins) to the effective user-ID
              of the calling process.

              msg_perm.cgid and msg_perm.gid are set(7,n,1 builtins) to the effective group-ID
              of the calling process.

              The  lowest  order 9 bits of msg_perm.mode are set(7,n,1 builtins) to the lowest
              order 9 bit of msgflg.

              msg_qnum, msg_lspid, msg_lrpid, msg_stime and msg_rtime are  set(7,n,1 builtins)
              to 0.

              msg_ctime is set(7,n,1 builtins) to the current time.

              msg_qbytes is set(7,n,1 builtins) to the system limit MSGMNB.

       If  the  message  queue(1,3) already exists the access(2,5) permissions are veri-
       fied, and a check is made to see if(3,n) it is marked for destruction.

       If successful, the return value will be the message queue(1,3) identifier (a
       nonnegative integer), otherwise -1 with errno indicating the error.

       On failure, errno is set(7,n,1 builtins) to one of the following values:

       EACCES     A message queue(1,3) exists for key, but the calling process does
                  not have permission to access(2,5) the queue(1,3), and does  not  have
                  the CAP_IPC_OWNER capability.

       EEXIST     A message queue(1,3) exists for key and msgflg was asserting both
                  IPC_CREAT and IPC_EXCL.

       ENOENT     No message queue(1,3) exists for key and msgflg wasn't  asserting

       ENOMEM     A  message  queue(1,3)  has  to be created but the system has not
                  enough memory for the new data structure.

       ENOSPC     A message queue(1,3) has to be created but the system  limit  for
                  the  maximum  number  of  message  queues  (MSGMNI) would be

       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 lowest
       order 9 bits of msgflg and creates a new message queue(1,3) (on success).

       The following is a system limit on message queue(1,3) resources affecting  a
       msgget call:

       MSGMNI     System  wide maximum number of message queues: policy depen-

       The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW would more
       clearly show its function.

       SVr4, SVID.  Until version(1,3,5) 2.3.20 Linux would return EIDRM for a msgget
       on a message queue(1,3) scheduled for deletion.

       msgctl(2), msgrcv(2), msgsnd(2), ftok(3), ipc(2,5)(5), capabilities(7)

Linux 2.6.6                       2004-05-27                         MSGGET(2)

References for this manual (incoming links)