MSGSND(2)                       System Calls                       MSGSND(2)
NAME
       msgsnd - message send operation
SYNOPSIS
       #include <sys/msg.h>       
int msgsnd(
int msqid, 
const void *msgp, 
size_t msgsz, 
int msgflg);
DESCRIPTION
       The 
msgsnd() function is used to send a message to the queue
       associated with the message queue identifier specified by 
msqid.
       The 
msgp argument points to a user-defined buffer that must contain
       first a field of type 
long int that will specify the type of the
       message, and then a data portion that will hold the data bytes of the
       message. The structure below is an example of what this user-defined
       buffer might look like:
         struct  mymsg {
                 long  mtype;     /* message type */
                 char  mtext[1];  /* message text */
         }
       The 
mtype member is a non-zero positive type 
long int that can be
       used by the receiving process for message selection.
       The 
mtext member is any text of length 
msgsz bytes. The 
msgsz       argument can range from 0 to a system-imposed maximum.
       The 
msgflg argument specifies the action to be taken if one or more
       of the following are true:
           o      The number of bytes already on the queue is equal to                  
msg_qbytes. See 
Intro(2).
           o      The total number of messages on the queue would exceed the
                  maximum allowed by the system. See NOTES.
       These actions are as follows:
           o      If (
msgflg&IPC_NOWAIT) is non-zero, the message will not
                  be sent and the calling process will return immediately.
           o      If (
msgflg&IPC_NOWAIT) is 0, the calling process will
                  suspend execution until one of the following occurs:
               o      The condition responsible for the suspension no longer
                      exists, in which case the message is sent.
               o      The message queue identifier 
msqid is removed from the
                      system (see 
msgctl(2)); when this occurs, 
errno is set
                      equal to 
EIDRM and 
-1 is returned.
               o      The calling process receives a signal that is to be
                      caught; in this case the message is not sent and the
                      calling process resumes execution in the manner
                      prescribed in 
sigaction(2).
       Upon successful completion, the following actions are taken with
       respect to the data structure associated with 
msqid (see 
Intro(2)):
           o      
msg_qnum is incremented by 1.
           o      
msg_lspid is set equal to the process 
ID of the calling
                  process.
           o      
msg_stime is set equal to the current time.
RETURN VALUES
       Upon successful completion, 
0 is returned. Otherwise, 
-1 is returned,
       no message is sent, and 
errno is set to indicate the error.
ERRORS
       The 
msgsnd() function will fail if:       
EACCES                 Operation permission is denied to the calling process. See                 
Intro(2).       
EAGAIN                 The message cannot be sent for one of the reasons cited
                 above and (
msgflg&IPC_NOWAIT) is non-zero.       
EIDRM                 The message queue identifier 
msgid is removed from the
                 system.       
EINTR                 The 
msgsnd() function was interrupted by a signal.       
EINVAL                 The value of 
msqid is not a valid message queue identifier,
                 or the value of 
mtype is less than 1.
                 The value of 
msgsz is less than 0 or greater than the
                 system-imposed limit.
       The 
msgsnd() function may fail if:        
EFAULT                  The 
msgp argument points to an illegal address.
USAGE
       The value passed as the 
msgp argument should be converted to type       
void *.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Standard        |
       +--------------------+-----------------+
SEE ALSO
       Intro(2), 
msgctl(2), 
msgget(2), 
msgrcv(2), 
setrctl(2), 
sigaction(2),       
attributes(7), 
standards(7), 
rctladm(8)NOTES
       The maximum number of messages allowed on a message queue is the
       minimum enforced value of the 
process.max-msg-messages resource
       control of the creating process at the time 
msgget(2) was used to
       allocate the queue.
        See 
rctladm(8) and 
setrctl(2) for information about using resource
       controls.
                              February 11, 2003                    MSGSND(2)