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
.