NAME | SYNOPSIS | FEATURES | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO
#include <mqueue.h>ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned int *msg_prio);
POSIX_MQ
The mq_receive system call is used to receive the oldest of the highest priority message(s) from the message queue specified by mqdes. If the size of the buffer in bytes, specified by the msg_len argument, is less than the mq_msgsize attribute of the message queue, mq_receive will fail and return an error. Otherwise, the selected message is removed from the queue and copied to the buffer pointed to by the msg_ptr argument.
If the msg_prio argument is not NULL, the priority of the selected message is stored at the location referenced by msg_prio.
If the specified message queue is empty and O_NONBLOCK is not set in the message queue description associated with mqdes, mq_receive will block until a message is enqueued on the message queue, or until mq_receive is interrupted by a signal, or until a mq_close(2POSIX) operation is performed using the same message queue descriptor. If more that one thread is waiting to receive a message when a message arrives at an empty queue, the thread that has been waiting the longest will be selected to receive the message. If the specified message queue is empty and O_NONBLOCK is set in the message queue description associated with mqdes, no message is removed from the queue, and mq_receive returns an error.
Upon successful completion, mq_receive returns the length of the selected message in bytes and the message is removed from the queue. Otherwise, no message will be removed from the queue, mq_receive will return -1, and set errno to indicate one of the following error conditions.
The mq_receive function is not supported.
The MQ feature [_POSIX_MESSAGE_PASSING] option (see sysconf(3POSIX)) is not configured.
The mqdes argument is not a valid message queue descriptor of a queue open for reading.
mq_receive is blocked waiting for available messages and a mq_close(2POSIX) operation was performed with the same message queue descriptor.
The O_NONBLOCK flag is set in the message queue description associated with mqdes and the message queue specified is empty.
msg_ptr or msg_prio points outside the allocated address space of the c_actor.
The message buffer size specified, msg_len, is less than the message size attribute of the message queue.
A signal interrupted the call to mq_receive.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | FEATURES | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO