# mq_send

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           mq_send, mq_timedsend — send a message to a message queue
           (**REALTIME**)
    


## SYNOPSIS



           #include <mqueue.h>
    
           int mq_send(mqd_t _mqdes_ , const char *_msg_ptr_ , size_t _msg_len_ ,
               unsigned _msg_prio_);
    
           #include <mqueue.h>
           #include <time.h>
    
           int mq_timedsend(mqd_t _mqdes_ , const char *_msg_ptr_ , size_t _msg_len_ ,
               unsigned _msg_prio_ , const struct timespec *_abstime_);
    


## DESCRIPTION



           The _mq_send_() function shall add the message pointed to by the
           argument _msg_ptr_ to the message queue specified by _mqdes_.  The
           _msg_len_ argument specifies the length of the message, in bytes,
           pointed to by _msg_ptr_.  The value of _msg_len_ shall be less than or
           equal to the _mq_msgsize_ attribute of the message queue, or
           _mq_send_() shall fail.
    
           If the specified message queue is not full, _mq_send_() shall behave
           as if the message is inserted into the message queue at the
           position indicated by the _msg_prio_ argument. A message with a
           larger numeric value of _msg_prio_ shall be inserted before messages
           with lower values of _msg_prio_.  A message shall be inserted after
           other messages in the queue, if any, with equal _msg_prio_.  The
           value of _msg_prio_ shall be less than {MQ_PRIO_MAX}.
    
           If the specified message queue is full and O_NONBLOCK is not set
           in the message queue description associated with _mqdes_ , _mq_send_()
           shall block until space becomes available to enqueue the message,
           or until _mq_send_() is interrupted by a signal. If more than one
           thread is waiting to send when space becomes available in the
           message queue and the Priority Scheduling option is supported,
           then the thread of the highest priority that has been waiting the
           longest shall be unblocked to send its message. Otherwise, it is
           unspecified which waiting thread is unblocked. If the specified
           message queue is full and O_NONBLOCK is set in the message queue
           description associated with _mqdes_ , the message shall not be queued
           and _mq_send_() shall return an error.
    
           The _mq_timedsend_() function shall add a message to the message
           queue specified by _mqdes_ in the manner defined for the _mq_send_()
           function. However, if the specified message queue is full and
           O_NONBLOCK is not set in the message queue description associated
           with _mqdes_ , the wait for sufficient room in the queue shall be
           terminated when the specified timeout expires. If O_NONBLOCK is
           set in the message queue description, this function shall be
           equivalent to _mq_send_().
    
           The timeout shall expire when the absolute time specified by
           _abstime_ passes, as measured by the clock on which timeouts are
           based (that is, when the value of that clock equals or exceeds
           _abstime_), or if the absolute time specified by _abstime_ has already
           been passed at the time of the call.
    
           The timeout shall be based on the CLOCK_REALTIME clock.  The
           resolution of the timeout shall be the resolution of the clock on
           which it is based. The _timespec_ argument is defined in the
           _< time.h>_ header.
    
           Under no circumstance shall the operation fail with a timeout if
           there is sufficient room in the queue to add the message
           immediately. The validity of the _abstime_ parameter need not be
           checked when there is sufficient room in the queue.
    


## RETURN VALUE



           Upon successful completion, the _mq_send_() and _mq_timedsend_()
           functions shall return a value of zero. Otherwise, no message
           shall be enqueued, the functions shall return -1, and _errno_ shall
           be set to indicate the error.
    


## ERRORS



           The _mq_send_() and _mq_timedsend_() functions shall fail if:
    
           **EAGAIN** The O_NONBLOCK flag is set in the message queue description
                  associated with _mqdes_ , and the specified message queue is
                  full.
    
           **EBADF** The _mqdes_ argument is not a valid message queue descriptor
                  open for writing.
    
           **EINTR** A signal interrupted the call to _mq_send_() or
                  _mq_timedsend_().
    
           **EINVAL** The value of _msg_prio_ was outside the valid range.
    
           **EINVAL** The process or thread would have blocked, and the _abstime_
                  parameter specified a nanoseconds field value less than
                  zero or greater than or equal to 1000 million.
    
           **EMSGSIZE**
                  The specified message length, _msg_len_ , exceeds the message
                  size attribute of the message queue.
    
           **ETIMEDOUT**
                  The O_NONBLOCK flag was not set when the message queue was
                  opened, but the timeout expired before the message could be
                  added to the queue.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           The value of the symbol {MQ_PRIO_MAX} limits the number of
           priority levels supported by the application.  Message priorities
           range from 0 to {MQ_PRIO_MAX}-1.
    


## RATIONALE



           None.
    


## FUTURE DIRECTIONS



           None.
    


* * *