The mq_receive() function is used to receive the oldest of
the highest priority messages in the queue specified by
mqdes. The priority of the message received is put in
the location pointed to by msg_prio, the data itself in the
location pointed to by msg_ptr, and the size received is
be returned.

Neutrino supports two implementations of message queues:
a traditional implementation, and an alternate one that uses
asynchronous messages.
For more information, see the entry for
mq and mqueue
in the Utilities Reference.

If you call mq_receive() with a msg_len of
anything other than the mq_msgsize of the specified queue,
then mq_receive() returns an error, and errno
is set to EINVAL.

If there are no messages on the queue specified, and
O_NONBLOCK wasn't set in oflag during
mq_open(), then the mq_receive() call
blocks. If multiple mq_receive() calls are blocked on
a single queue, then they're unblocked in FIFO order as messages
arrive.

In the traditional (mqueue) implementation, calling
read()
with mqdes is analogous to
calling mq_receive() with a NULL
msg_prio.

The O_NONBLOCK flag was
set and there are no messages currently on the specified queue.

EBADF

The mqdes argument doesn't represent a valid queue open for
reading.

EINTR

The operation was interrupted by a signal.

EINVAL

The msg_ptr argument isn't a valid pointer, or
msg_len is less than 0, or msg_len is
less than the message size specified in
mq_open(). The
default message size is 4096 bytes for the traditional
(mqueue) implementation, and 256 bytes for the alternate
(mq) implementation.

EMSGSIZE

The given msg_len is
shorter than the mq_msgsize for the given queue
or the
given msg_len is too short for the message that
would have been received.