Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


mq_open(3) — Linux manual page

NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |ATTRIBUTES |VERSIONS |STANDARDS |HISTORY |BUGS |SEE ALSO |COLOPHON

mq_open(3)               Library Functions Manualmq_open(3)

NAME        top

       mq_open - open a message queue

LIBRARY        top

       Real-time library (librt,-lrt)

SYNOPSIS        top

#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);

DESCRIPTION        top

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.

RETURN VALUE        top

       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.

ERRORS        top

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).

ATTRIBUTES        top

       For an explanation of the terms used in this section, seeattributes(7).       ┌──────────────────────────────────────┬───────────────┬─────────┐       │InterfaceAttributeValue│       ├──────────────────────────────────────┼───────────────┼─────────┤       │mq_open()                            │ Thread safety │ MT-Safe │       └──────────────────────────────────────┴───────────────┴─────────┘

VERSIONS        top

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.

STANDARDS        top

       POSIX.1-2008.

HISTORY        top

       POSIX.1-2001.

BUGS        top

       Before Linux 2.6.14, the process umask was not applied to the       permissions specified inmode.

SEE ALSO        top

mq_close(3),mq_getattr(3),mq_notify(3),mq_receive(3),mq_send(3),mq_unlink(3),mq_overview(7)

COLOPHON        top

       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.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp