Send a message to a message queue
#include <mqueue.h>
#include <time.h>
int mq_timedsend( mqd_t mqdes,
const char * msg_ptr,
size_t msg_len,
unsigned int msg_prio,
const struct timespec * abs_timeout );
libc
The mq_timedsend() 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 time contained in the abs_timeout argument specifies the absolute time (not the relative time to the current time) to wait before it stops trying to send messages. |
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_timedsend() blocks. It becomes unblocked when there's room on the queue to send the given message. If more than one mq_timedsend() is blocked on a given queue, and space becomes available in that queue to send, then the mq_timedsend() with the highest priority message is unblocked.
Calling write() with mqdes is analogous to calling mq_timedsend() with a msg_prio of 0.
See the example for mq_timedreceive().
| Safety: | |
|---|---|
| Cancellation point | Yes |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |
mq_close(), mq_open(), mq_receive()