COHERENT manpages
This page displays the COHERENT manpage for msgsnd() [Send a message].
List of available manpages
Index
msgsnd() -- General Function (libc) Send a message #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> msgsnd(id, buffer, size, flag) int id, size, flag; long *buffer; The function msgsnd() inserts a message into the queue associated with identifier id. buffer points to a user-defined buffer that holds a code that defines the type of the message, and the text of the message. buffer can be described by a structure something like the following (if we pretend mtext[] is legal C): struct msgbuf { long mtype; /* message type */ char mtext[]; /* message text */ }; Field mtype is a positive long integer that gives the type of message this is. Function msgrcv() examines this field to see if this message is of the type that it seeks. The text of the message immediately follows mtype in memory, for size bytes. size can range from zero to a maximum defined in the kernel variable NMSC. If any of the following error conditions occurs, msgsnd() does not send the message, sets errno to the value given in parentheses, and returns -1: -> id is not a valid message queue identifier (EINVAL). -> The calling process does not have permission to manipulate this queue (EACCES). -> Field mtype in the structure pointed to by buffer is less than one (EINVAL). -> size is less than zero or greater than the system-imposed limit (EINVAL). -> buffer points to an illegal address (EFAULT). Sending a message may exceed a system-defined limit. There are two such limits: one limits the size of a queue, and the other sets the total number of messages available to your system. The maximum size of this queue is given in the field msg_qbytes of the structure msqid_ds that controls that queue. If issuing a message size bytes long would push the total size of the queue's messages past the value of msg_qbytes, then an error occurs. Likewise, an error occurs if the system already holds the maximum maximum number of message available to it, as set by the kernel variable NMSG. flag indicates how msgsnd() is to react to either of the above conditions. If flag is OR'd to include value IPC_NOWAIT, then msgsnd() reacts as it does with any other error: it does not send the message, it returns -1, and it sets errno to an appropriate value (in this case, EAGAIN). If, however, flag is not OR'd to include IPC_NOWAIT, then msgsnd() waits until any of the following happens: 1. The error condition resolves. In this case, msgsnd() sends the message and returns normally. 2. The message queue identified by id is removed from the system. In this case, msgsnd() does not send the message; it sets errno to EIDRM; and it returns -1. 3. The process that issued the call to msgsnd() receives a signal. In this case, msgsnd() does not send the message, sets errno to EINTR, and returns -1. The calling process then executes the action requested by the signal. For information on the behavior that each signal invokes, see the Lexicon entry for signal(). msgsnd() successfully sends a message, returns zero and modifies the message queue in the following manner: -> It increments by one the value in field msg_qnum. -> It sets field msg_lspid to the process ID of the calling process. -> It sets msg_stime to the current time. Example For an example of this function, see the Lexicon entry for msgget(). Files /usr/include/sys/ipc.h /usr/include/sys/msg.h See Also libc, msgctl(), msgget(), msgrcv()