LIBRARY
Lb libcSYNOPSIS
In sys/types.h In sys/ipc.h In sys/msg.h Ft int Fn msgsnd int msqid const void *msgp size_t msgsz int msgflgDESCRIPTION
The Fn msgsnd function sends a message to the message queue specified in Fa msqid . The Fa msgp argument points to a structure containing the message. This structure should consist of the following members:long mtype; /* message type */ char mtext[1]; /* 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 Fa msgsz bytes. The argument Fa msgsz can range from 0 to a system-imposed maximum, MSGMAX
If the number of bytes already on the message queue plus Fa 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, Fa msgflg determines the action of Fn msgsnd . If Fa msgflg has IPC_NOWAIT mask set in it, the call will return immediately. If Fa msgflg does not have IPC_NOWAIT set in it, the call will block until:
- 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 Er EINVAL .
- The caller catches a signal. The call returns with errno set to Er EINTR .
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.
RETURN VALUES
Rv -std msgsndERRORS
The Fn msgsnd function will fail if:- Bq Er EINVAL
-
The
Fa msqid
argument
is not a valid message queue identifier.
The message queue was removed while Fn msgsnd was waiting for a resource to become available in order to deliver the message.
The Fa msgsz argument is greater than msg_qbytes
The Fa mtype argument is not greater than 0.
- Bq Er EACCES
- The calling process does not have write access to the message queue.
- Bq Er EAGAIN
- There was no space for this message either on the queue, or in the whole system, and IPC_NOWAIT was set in Fa msgflg .
- Bq Er EFAULT
- The Fa msgp argument points to an invalid address.
- Bq Er EINTR
- The system call was interrupted by the delivery of a signal.
HISTORY
Message queues appeared in the first release of AT&T Unix System V.BUGS
Nx and Fx do not define the Er EIDRM error value, which should be used in the case of a removed message queue.