Open a message queue
#include <mqueue.h> mqd_t mq_open( const char * name, int oflag, ... )
If you set O_CREAT in the oflag argument, you must also pass these arguments to mq_open():
If you set any bits other than file permission bits, they're ignored. Read and write permissions are analogous to receive and send permissions; execute permissions are ignored.
If mq_attr is NULL, the following default attributes are used — depending on which implementation of message queues you're using — provided that you didn't override the defaults when you started the message-queue server:
Attribute | Traditional | Alternate |
---|---|---|
mq_maxmsg | 1024 | 64 |
mq_msgsize | 4096 | 256 |
mq_flags | 0 | 0 |
If mq_attr isn't NULL, the new queue adopts the mq_maxmsg and mq_msgsize of mq_attr. The mq_flags flags field is ignored.
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Use the -l mq option to qcc to link against this library.
The mq_open() function opens a message queue referred to by name, and returns a message queue descriptor by which the queue can be referenced in the future.
Neutrino supports two implementations of message queues: a traditional implementation, and an alternate one that uses asynchronous messages. For more information, see the entries for mq and mqueue in the Utilities Reference, as well as the Managing POSIX Message Queues technote. |
The name is interpreted as follows:
name | Pathname space entry |
---|---|
/entry | /dev/mqueue/entry |
/entry/newentry | /entry/newentry |
entry | cwd/entry |
entry/newentry | cwd/entry/newentry |
where cwd is the current working directory for the program at the point that it calls mq_open().
In either case, slash characters other than the leading slash character aren't interpreted, and the specified name, including these slash characters, is used to identify the message queue. In other words, additional slashes don't create a directory structure under /dev/mq.
For example, if your current directory is /tmp:
name | Pathname space entry |
---|---|
/entry | /dev/mq/entry |
entry | /dev/mq/tmp/entry |
If you want to open a queue on another node, you have to use the traditional (mqueue) implementation and specify the name as /net/node/mqueue_location. |
If name doesn't exist, mq_open() examines the third and fourth parameters: a mode_t and a pointer to an mq_attr structure.
The only time that a call to mq_open() with O_CREAT set fails is if you open a message queue and later unlink it, but never close it. Like their file counterparts, an unlinked queue that hasn't yet been closed must continue to exist; an attempt to recreate such a message queue fails, and errno is set to ENOENT.
Message queues persist — like files — even after the processes that created them end. A message queue is destroyed when the last process connected to it unlinks from the queue by calling mq_unlink(). |
A valid message queue descriptor if the queue is successfully created, or -1 (errno is set).
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | No |
Thread | Yes |
mq_close(), mq_getattr(), mq_notify(), mq_receive(), mq_send(), mq_setattr(), mq_timedreceive(), mq_timedsend(), mq_unlink()
mq, mqueue in the Utilities Reference
Managing POSIX Message Queues technote.