[Previous] [Contents] [Next]

mq_send()

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

Library:

libc

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.

The queue maintained is in priority order (priorities may range from 0 to MQ_PRIO_MAX), and in FIFO order within the same priority.

If the number of elements on the specified queue is equal to its mq_maxmsg, and neither O_NONBLOCK (in oflag of mq_open()) nor MQ_NONBLOCK (in the queue's mq_flags) has been set, 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.

Calling write() with mqdes is analogous to calling mq_send() with a msg_prio of 0.

Returns:

-1
An error occurred (errno is set).
Any other value
Success.

Errors:

EAGAIN
The O_NONBLOCK flag was set when opening the queue, or the MQ_NONBLOCK flag was set in its attributes, 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.
EINTR
The call was interrupted by a signal.
EINVAL
One of the following cases is true:
EMSGSIZE
The msg_len argument was greater than the msgsize associated with the specified queue.

Classification:

POSIX 1003.1 (Realtime Extensions)

Safety:
Cancellation point Yes
Interrupt handler No
Signal handler No
Thread Yes

See also:

mq_close(), mq_open(), mq_receive()


[Previous] [Contents] [Next]