msgsnd(3)
NAME
msgsnd - send a message to a message queue
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
DESCRIPTION
- The msgsnd() function sends a message to the message queue
- specified in
msqid. The 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 se
- lecting messages (see msgrcv(3)), mtext is an array of bytes, with a
- size up to that
of the system limit (MSGMAX). - 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(3)), or the number of messages on all queues system - wide is
already equal to the system limit, msgflg determines the ac - tion of
msgsnd(). If msgflg has IPC_NOWAIT mask set in it, the call - will return
immediately. If msgflg does not have IPC_NOWAIT set in it, - the call will
block until: - +o The condition which caused the call to block does no
- longer exist.
- The message will be sent.
- +o The message queue is removed, in which case -1 will be
- returned, and
- errno is set to EINVAL.
- +o The caller catches a signal. The call returns with
- errno set to
- EINTR.
- After a successful call, the data structure associated with
- the message
queue is updated in the following way: - +o msg_cbytes is incremented by the size of the message.
- +o msg_qnum is incremented by 1.
- +o msg_lspid is set to the pid of the calling process.
- +o msg_stime is set to the current time.
RETURN VALUES
- The msgsnd() function returns the value 0 if successful;
- otherwise the
value -1 is returned and the global variable errno is set to - indicate the
error.
ERRORS
The msgsnd() function will fail if:
- [EINVAL] The msqid argument is not a valid message
- queue iden
- tifier
- The message queue was removed while
- msgsnd() was waiting for a resource to become available in
- order to
deliver the message. - The msgsz argument is less than 0, or
- greater than
msg_qbytes. - The mtype argument is not greater than 0.
- [EACCES] The calling process does not have write
- access to the
- message queue.
- [EAGAIN] There was no space for this message ei
- ther on the
- queue, or in the whole system, and
- IPC_NOWAIT was set
in msgflg. - [EFAULT] The msgp argument points to an invalid
- address.
- [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
- NetBSD and FreeBSD do not define the EIDRM error value,
- which should be
used in the case of a removed message queue. - BSD November 24, 1997