send a message to a message
msqid, const void
function sends a message to the message queue specified by
msqid. msgp points to a
structure containing the message. This structure should consist of the
long mtype; /* message type */ char mtext; /* body of message */
mtype is an integer greater than 0 that can
be used for selecting messages (see
msgrcv(2)); mtext is an array of
msgsz bytes, with a size between 0 and that of the
system limit (
If the number of bytes already on the message queue
plus msgsz is bigger than the maximum number of bytes
on the message queue (msg_qbytes,
see msgctl(2)), or the number of messages on all queues system-wide is already equal to the system limit, msgflg determines the action of
If msgflg has
set in it, the call will return immediately. If msgflg
does not have
IPC_NOWAIT set in it, the call will
- 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 the message.
- msg_qnum is incremented by 1.
- msg_lspid is set to the pid of the calling process.
- msg_stime is set to the current time.
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
msgsnd() will fail if:
- msqid is not a valid message queue identifier.
mtype is less than 1.
msgsz is greater than msg_qbytes.
- 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_NOWAITwas set in msgflg.
- 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.
msgctl(2), msgget(2), msgrcv(2)
msgsnd() function conforms to the
X/Open System Interfaces option of IEEE Std 1003.1-2008
Message queues first appeared in AT&T System V Release 1 UNIX and have been available since NetBSD 1.0.