send a message to a message queue
() function sends a message to the
message queue specified by msqid
points to a structure containing the
message. This structure should consist of the following members:
long mtype; /* message type */
char mtext; /* body of message */
is an integer greater than 0 that can be
used for selecting messages (see
is an array of
bytes, with a size between 0 and that
of the system limit (
If the number of bytes already on the message queue plus
is bigger than the maximum number of
bytes on the message queue (msg_qbytes
the number of messages on all queues system-wide is already equal to the
system limit, msgflg
determines the action of
mask set in it, the call will
return immediately. If msgflg
does not have
set in it, the call will block
- The condition which caused the call to block does no longer exist. The
message will be sent.
- The message queue is removed, in which case -1 will be returned, and
errno is set to
- The caller catches a signal. The call returns with
errno set to
After a successful call, the data structure associated with the message queue is
updated in the following way:
- msg_cbytes is incremented by the size of
- msg_qnum is incremented by 1.
- msg_lspid is set to the pid of the
- msg_stime is set to the current
Upon successful completion, the value 0 is returned; otherwise the
value -1 is returned and the global variable
is set to indicate the error.
() will fail if:
- msqid is not a valid message queue
msgsz is greater than
- The calling process does not have write access to the message queue.
- There was no space for this message either on the queue, or in the whole
IPC_NOWAIT was set in
- msgp points to an invalid address.
- The system call was interrupted by the delivery of a signal.
- The message queue was removed while
msgsnd() was waiting for a resource to
become available in order to deliver the message.
Message queues appeared in AT&T System V
Release 1 UNIX