int
msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
)
function sends a message from the message queue specified in
msqid.
msgp
points to a user-defined structure containing the message.
This structure must contain a first field of type
long
that will indicate the user-defined type of the message.
The remaining fields will contain the contents of the message.
The following is an example of what this user-defined
structure might look like:
struct mymsg {
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 bytes, with size up to the system limit
MSGMAX.
If the number of bytes already on the message queue plus
msgsz
is greater than the maximum number of bytes in the message queue
(msg_qbytes,
see
msgctl(2)),
or if the number of messages on all queues system-wide is already equal to
the system limit,
msgflg
determines the action 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:
EINVAL.
EINTR.
After a successful call, the data structure associated with the message queue is updated in the following way:
)
will fail if:
EINVAL]msqid
is not a valid message queue identifier,
or the value of
mtype
is less than 1.
The message queue was removed while
msgsnd()
was waiting for a resource to become available in order to deliver the
message.
msgsz
is less than 0, or greater than
msg_qbytes.
EACCES]EAGAIN]IPC_NOWAIT
was set in
msgflg.
EFAULT]msgp
points to an invalid address.
EINTR]AT&T System V UNIX.