NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |ATTRIBUTES |VERSIONS |STANDARDS |HISTORY |BUGS |SEE ALSO |COLOPHON | |
mq_open(3) Library Functions Manualmq_open(3)mq_open - open a message queue
Real-time library (librt,-lrt)
#include <fcntl.h>/* For O_* constants */#include <sys/stat.h>/* For mode constants */#include <mqueue.h>mqd_t mq_open(const char *name, intoflag);mqd_t mq_open(const char *name, intoflag, mode_tmode,struct mq_attr *attr);
mq_open() creates a new POSIX message queue or opens an existing queue. The queue is identified byname. For details of the construction ofname, seemq_overview(7). Theoflag argument specifies flags that control the operation of the call. (Definitions of the flags values can be obtained by including<fcntl.h>.) Exactly one of the following must be specified inoflag:O_RDONLY Open the queue to receive messages only.O_WRONLY Open the queue to send messages only.O_RDWROpen the queue to both send and receive messages. Zero or more of the following flags can additionally beORed inoflag:O_CLOEXEC(since Linux 2.6.26) Set the close-on-exec flag for the message queue descriptor. Seeopen(2) for a discussion of why this flag is useful.O_CREAT Create the message queue if it does not exist. The owner (user ID) of the message queue is set to the effective user ID of the calling process. The group ownership (group ID) is set to the effective group ID of the calling process.O_EXCLIfO_CREATwas specified inoflag, and a queue with the givenname already exists, then fail with the errorEEXIST.O_NONBLOCK Open the queue in nonblocking mode. In circumstances wheremq_receive(3) andmq_send(3) would normally block, these functions instead fail with the errorEAGAIN. IfO_CREATis specified inoflag, then two additional arguments must be supplied. Themode argument specifies the permissions to be placed on the new queue, as foropen(2). (Symbolic definitions for the permissions bits can be obtained by including<sys/stat.h>.) The permissions settings are masked against the process umask. The fields of thestruct mq_attr pointed toattr specify the maximum number of messages and the maximum size of messages that the queue will allow. This structure is defined as follows: struct mq_attr { long mq_flags; /* Flags (ignored for mq_open()) */ long mq_maxmsg; /* Max. # of messages on queue */ long mq_msgsize; /* Max. message size (bytes) */ long mq_curmsgs; /* # of messages currently in queue (ignored for mq_open()) */ }; Only themq_maxmsg andmq_msgsize fields are employed when callingmq_open(); the values in the remaining fields are ignored. Ifattr is NULL, then the queue is created with implementation- defined default attributes. Since Linux 3.5, two/proc files can be used to control these defaults; seemq_overview(7) for details.On success,mq_open() returns a message queue descriptor for use by other message queue functions. On error,mq_open() returns(mqd_t) -1, witherrno set to indicate the error.
EACCESThe queue exists, but the caller does not have permission to open it in the specified mode.EACCESname contained more than one slash.EEXISTBothO_CREATandO_EXCLwere specified inoflag, but a queue with thisname already exists.EINVALname doesn't follow the format inmq_overview(7).EINVAL O_CREATwas specified inoflag, andattr was not NULL, butattr->mq_maxmsg orattr->mq_msqsize was invalid. Both of these fields must be greater than zero. In a process that is unprivileged (does not have theCAP_SYS_RESOURCE capability),attr->mq_maxmsg must be less than or equal to themsg_max limit, andattr->mq_msgsize must be less than or equal to themsgsize_max limit. In addition, even in a privileged process,attr->mq_maxmsg cannot exceed theHARD_MAXlimit. (Seemq_overview(7) for details of these limits.)EMFILEThe per-process limit on the number of open file and message queue descriptors has been reached (see the description ofRLIMIT_NOFILEingetrlimit(2)).ENAMETOOLONGname was too long.ENFILEThe system-wide limit on the total number of open files and message queues has been reached.ENOENTTheO_CREATflag was not specified inoflag, and no queue with thisname exists.ENOENTname was just "/" followed by no other characters.ENOMEMInsufficient memory.ENOSPCInsufficient space for the creation of a new message queue. This probably occurred because thequeues_max limit was encountered; seemq_overview(7).
For an explanation of the terms used in this section, seeattributes(7). ┌──────────────────────────────────────┬───────────────┬─────────┐ │Interface│Attribute│Value│ ├──────────────────────────────────────┼───────────────┼─────────┤ │mq_open() │ Thread safety │ MT-Safe │ └──────────────────────────────────────┴───────────────┴─────────┘
C library/kernel differences Themq_open() library function is implemented on top of a system call of the same name. The library function performs the check that thename starts with a slash (/), giving theEINVALerror if it does not. The kernel system call expectsname to contain no preceding slash, so the C library function passesname without the preceding slash (i.e.,name+1) to the system call.
POSIX.1-2008.
POSIX.1-2001.
Before Linux 2.6.14, the process umask was not applied to the permissions specified inmode.
mq_close(3),mq_getattr(3),mq_notify(3),mq_receive(3),mq_send(3),mq_unlink(3),mq_overview(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-17mq_open(3)Pages that refer to this page:getrlimit(2), syscalls(2), umask(2), mq_close(3), mq_getattr(3), mq_notify(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(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. | ![]() |