# msgget

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           msgget — get the XSI message queue identifier
    


## SYNOPSIS



           #include <sys/msg.h>
    
           int msgget(key_t _key_ , int _msgflg_);
    


## DESCRIPTION



           The _msgget_() function operates on XSI message queues (see the Base
           Definitions volume of POSIX.1‐2017, _Section 3.226_ , _Message Queue_).
           It is unspecified whether this function interoperates with the
           realtime interprocess communication facilities defined in _Section_
           _2.8_ , _Realtime_.
    
           The _msgget_() function shall return the message queue identifier
           associated with the argument _key_.
    
           A message queue identifier, associated message queue, and data
           structure (see _< sys/msg.h>_), shall be created for the argument _key_
           if one of the following is true:
    
            *  The argument _key_ is equal to IPC_PRIVATE.
    
            *  The argument _key_ does not already have a message queue
               identifier associated with it, and (_msgflg_ & IPC_CREAT) is
               non-zero.
    
           Upon creation, the data structure associated with the new message
           queue identifier shall be initialized as follows:
    
            *  **msg_perm.cuid** , **msg_perm.uid** , **msg_perm.cgid** , and **msg_perm.gid**
               shall be set to the effective user ID and effective group ID,
               respectively, of the calling process.
    
            *  The low-order 9 bits of **msg_perm.mode** shall be set to the low-
               order 9 bits of _msgflg_.
    
            *  **msg_qnum** , **msg_lspid** , **msg_lrpid** , **msg_stime** , and **msg_rtime** shall
               be set to 0.
    
            *  **msg_ctime** shall be set to the current time, as described in
               _Section 2.7.1_ , _IPC General Description_.
    
            *  **msg_qbytes** shall be set to the system limit.
    


## RETURN VALUE



           Upon successful completion, _msgget_() shall return a non-negative
           integer, namely a message queue identifier.  Otherwise, it shall
           return -1 and set _errno_ to indicate the error.
    


## ERRORS



           The _msgget_() function shall fail if:
    
           **EACCES** A message queue identifier exists for the argument _key_ , but
                  operation permission as specified by the low-order 9 bits
                  of _msgflg_ would not be granted; see _Section 2.7_ , _XSI_
                  _Interprocess Communication_.
    
           **EEXIST** A message queue identifier exists for the argument _key_ but
                  ((_msgflg_ & IPC_CREAT) && (_msgflg_ & IPC_EXCL)) is non-zero.
    
           **ENOENT** A message queue identifier does not exist for the argument
                  _key_ and (_msgflg_ & IPC_CREAT) is 0.
    
           **ENOSPC** 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.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           The POSIX Realtime Extension defines alternative interfaces for
           interprocess communication (IPC). Application developers who need
           to use IPC should design their applications so that modules using
           the IPC routines described in _Section 2.7_ , _XSI Interprocess_
           _Communication_ can be easily modified to use the alternative
           interfaces.
    


## RATIONALE



           None.
    


## FUTURE DIRECTIONS



           None.
    


* * *