mq_send()

QNX SDP8.0C Library ReferenceAPIDeveloper

Send a message to a queue

Synopsis:

#include <mqueue.h>

int mq_send( mqd_t mqdes, 
             const char * msg_ptr, 
             size_t msg_len, 
             unsigned int msg_prio );

Arguments:

mqdes
The message-queue descriptor, returned by mq_open(), of the message queue that you want to send a message to.
msg_ptr
A pointer to the message that you want to send.
msg_len
The size of the message.
msg_prio
The priority of the message, in the range from 0 through (MQ_PRIO_MAX - 1).

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The mq_send() function puts a message of size msg_len and pointed to by msg_ptr into the queue indicated by mqdes. The new message has a priority of msg_prio.

Note:
The message queue manager needs to be running. For more information, see the entry for mqueue in the Utilities Reference.

The queue is maintained in priority order, and in FIFO order within the same priority.

If the number of elements on the specified queue is equal to its mq_maxmsg, and O_NONBLOCK wasn't set (in the oflag argument to mq_open()), the call to mq_send() blocks. It becomes unblocked when there's room on the queue to send the given message. If more than one mq_send() is blocked on a given queue, and space becomes available in that queue to send, then the mq_send() with the highest priority message is unblocked.

In the traditional (mqueue) implementation, calling write() with mqdes is analogous to calling mq_send() with a msg_prio of 0.

Returns:

-1 if an error occurred (errno is set). Any other value indicates success.

Errors:

EAGAIN
The O_NONBLOCK flag was set when opening the queue, and the specified queue is full.
EBADF
The mqdes argument doesn't represent a valid message queue descriptor, or mqdes wasn't opened for writing.
EFAULT
The msg_ptr argument isn't a valid pointer.
EINTR
The call was interrupted by a signal.
EINVAL
The value of msg_prio was greater than (MQ_PRIO_MAX - 1).
EMSGSIZE
The msg_len argument was greater than the msgsize associated with the specified queue.

Examples:

See the example for mq_open().

Classification:

POSIX 1003.1 MSG

Safety:
Cancellation pointYes
Signal handlerNo
ThreadYes
Page updated: