# mq_send

## NAME



           mq_send, mq_timedsend - send a message to a message queue
    


## LIBRARY



           Real-time library (_librt_ , _-lrt_)
    


## SYNOPSIS



           **#include <mqueue.h>**
    
           **int mq_send(** size_t msg_len;
                         **mqd_t** _mqdes_**, const char** _msg_ptr_**[**_msg_len_**],**
                         **size_t** _msg_len_**, unsigned int** _msg_prio_**);**
    
           **#include <time.h>**
           **#include <mqueue.h>**
    
           **int mq_timedsend(** size_t msg_len;
                         **mqd_t** _mqdes_**, const char** _msg_ptr_**[**_msg_len_**],**
                         **size_t** _msg_len_**, unsigned int** _msg_prio_**,**
                         **const struct timespec ***_abs_timeout_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **mq_timedsend**():
               _POSIX_C_SOURCE >= 200112L
    


## DESCRIPTION



           **mq_send**() adds the message pointed to by _msg_ptr_ to the message
           queue referred to by the message queue descriptor _mqdes_.  The
           _msg_len_ argument specifies the length of the message pointed to by
           _msg_ptr_ ; this length must be less than or equal to the queue's
           _mq_msgsize_ attribute.  Zero-length messages are allowed.
    
           The _msg_prio_ argument is a nonnegative integer that specifies the
           priority of this message.  Messages are placed on the queue in
           decreasing order of priority, with newer messages of the same
           priority being placed after older messages with the same priority.
           See mq_overview(7) for details on the range for the message
           priority.
    
           If the message queue is already full (i.e., the number of messages
           on the queue equals the queue's _mq_maxmsg_ attribute), then, by
           default, **mq_send**() blocks until sufficient space becomes available
           to allow the message to be queued, or until 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 **EAGAIN**.
    
           **mq_timedsend**() behaves just like **mq_send**(), except that if the
           queue is full and the **O_NONBLOCK** flag is not enabled for the
           message queue description, then _abs_timeout_ points to a structure
           which specifies how long the call will block.  This value is an
           absolute timeout in seconds and nanoseconds since the Epoch,
           1970-01-01 00:00:00 +0000 (UTC), specified in a **timespec**(3)
           structure.
    
           If the message queue is full, and the timeout has already expired
           by the time of the call, **mq_timedsend**() returns immediately.
    


## RETURN VALUE



           On success, **mq_send**() and **mq_timedsend**() return zero; on error, -1
           is returned, with _errno_ set to indicate the error.
    


## ERRORS



           **EAGAIN** The queue was full, and the **O_NONBLOCK** flag was set for the
                  message queue description referred to by _mqdes_.
    
           **EBADF** The descriptor specified in _mqdes_ was invalid or not opened
                  for writing.
    
           **EINTR** The call was interrupted by a signal handler; see
                  signal(7).
    
           **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.
    
           **EMSGSIZE**
                  _msg_len_ was greater than the _mq_msgsize_ attribute of the
                  message queue.
    
           **ETIMEDOUT**
                  The call timed out before a message could be transferred.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **mq_send**(), **mq_timedsend**()            │ Thread safety │ MT-Safe │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## VERSIONS



           On Linux, **mq_timedsend**() is a system call, and **mq_send**() is a
           library function layered on top of that system call.
    


## STANDARDS



           POSIX.1-2008.
    


* * *