mq_receive

NAME

mq_receive, mq_timedreceive - receive a message from a message queue

SYNOPSIS

#include <mqueue.h>
 I ssize_t mq_receive(mqd_t  mqdes , char * msg_ptr ,
I                    size_t  msg_len , unsigned * msg_prio );
 #define _XOPEN_SOURCE 600
#include <time.h>
#include <mqueue.h>
 I ssize_t mq_timedreceive(mqd_t  mqdes , char * msg_ptr ,
I                    size_t  msg_len , unsigned * msg_prio ,
I                    const struct timespec * abs_timeout );

DESCRIPTION

R mq_receive () removes the oldest message with the highest priority from the message queue referred to by the descriptor R mqdes , and places it in the buffer pointed to by R msg_ptr . The msg_len argument specifies the size of the buffer pointed to by R msg_ptr ; this must be greater than the mq_msgsize attribute of the queue (see mq_getattr(3)). If prio is not NULL, then the buffer to which it points is used to return the priority associated with the received message. If the queue is empty, then, by default, R mq_receive () blocks until a message becomes available, or the call is interrupted by a signal handler. If the O_NONBLOCK flag is enabled for the message queue description, then the call instead fails immediately with the error R EAGAIN . R mq_timedreceive () behaves just like R mq_receive (), except that if the queue is empty and the O_NONBLOCK flag is not enabled for the message queue description, then abs_timeout points to a structure which specifies a ceiling on the time for which the call will block. This ceiling is an absolute timeout in seconds and nanoseconds since the Epoch (midnight on the morning of 1 January 1970), specified in the following structure:
struct timespec {
    time_t tv_sec;        /* seconds */
    long   tv_nsec;       /* nanoseconds */
};

If no message is available, and the timeout has already expired by the time of the call, R mq_timedreceive () returns immediately.

RETURN VALUE

On success, R mq_receive () and R mq_timedreceive () return the number of bytes in the received message; on error, -1 is returned, with errno set to indicate the error.

ERRORS

EAGAIN
The queue was empty, and the O_NONBLOCK flag was set for the message queue description referred to by R mqdes .
EBADF
The descriptor specified in mqdes was invalid.
EMSGSIZE
R msg_len was less than the mq_msgsize attribute of the message queue.
EINTR
The call was interrupted by a signal handler.
EINVAL
The call would have blocked, and abs_timeout was invalid, either because tv_sec was less than zero, or because tv_nsec was less than zero or greater than 1000 million.
ETIMEDOUT
The call timed out before a message could be transferred.

CONFORMING TO

POSIX.1-2001.

SEE ALSO