MSGSND(2) | System Calls Manual | MSGSND(2) |
msgsnd
—
#include <sys/msg.h>
int
msgsnd
(int
msqid, const void
*msgp, size_t
msgsz, int
msgflg);
msgsnd
() function sends a message from the message
queue specified in msqid. The msgp
argument is a pointer 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 */ };
The mtype field is an integer greater than 0
that can be used for selecting messages (see
msgrcv(2)). The
mtext field is an array of bytes of length
msgsz, 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:
msgsnd
() will fail if:
EACCES
]EAGAIN
]IPC_NOWAIT
was set in
msgflg.EFAULT
]EINTR
]EINVAL
]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 greater than
msg_qbytes or
SSIZE_MAX
.
msgsnd
system call conforms to
X/Open System Interfaces and Headers Issue 5
(“XSH5”) and IEEE Std 1003.1-2001
(“POSIX.1”).
July 24, 2013 | NetBSD 9.0 |