|
|
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
long mtype; /* message type */
char mtext[]; /* message text */
mtype is a positive integer that can be used by the receiving process for message selection. mtext is any text of length msgsz bytes. msgsz can range from 0 to a system imposed maximum.
msgflg specifies the action to be taken if one or more of the following are true:
The number of bytes already on the queue is equal to msg_qbytes (see intro.2
The total number of messages on all queues system-wide is equal to the system-imposed limit.
These actions are as follows:
If (msgflg&IPC_NOWAIT) is true, the message is not sent and the calling process returns immediately.
If (msgflg&IPC_NOWAIT) is false, the calling process suspends execution until one of the following occurs:
msgrcv() reads a message from the queue associated with the message queue identifier specified by msqid and places it in the user defined structure pointed to by msgp. The structure must contain a message type field followed by the area for the message text (see the structure mymsg above). mtype is the received message's type as specified by the sending process. mtext is the text of the message. msgsz specifies the size in bytes of mtext.
The received message is truncated to
msgsz
bytes if it is larger than
msgsz
and
(msgflg&MSG_NOERROR)
is true.
The truncated part of the message is lost and no indication of the truncation is
given to the calling process.
msgtyp specifies the type of message requested as follows:
If msgtyp is 0, the first message on the queue is received.
If msgtyp is greater than 0, the first message of type msgtyp is received.
If msgtyp is less than 0, the first message of the lowest type that is less than or equal to the absolute value of msgtyp is received.
msgflg specifies the action to be taken if a message of the desired type is not on the queue. These are as follows:
If (msgflg&IPC_NOWAIT) is true, the calling process returns immediately with a return value of -1 and sets errno to ENOMSG.
If (msgflg&IPC_NOWAIT) is false, the calling process suspends execution until one of the following occurs:
Upon successful completion, the return value is as follows:
msgsnd() returns a value of 0.
msgrcv returns the number of bytes actually placed into mtext.
Otherwise, a value of -1 is returned and errno is set to indicate the error.
msgsnd() fails and sends no message if one or more of the following are true:
Upon successful completion, the following actions are taken with respect to the data structure associated with msqid (see intro.2
msg_qnum is incremented by 1.
msg_lspid is set to the process ID of the calling process.
msg_stime is set to the current time.
msgrcv() fails and receives no message if one or more of the following are true:
Upon successful completion, the following actions are taken with respect to the data structure associated with msqid (see intro.2
msg_qnum is decremented by 1.
msg_lrpid is set to the process ID of the calling process.
msg_rtime is set to the current time.
|
|
Created by unroff & hp-tools. © by Hans-Peter Bischof. All Rights Reserved (1997).
Last modified 21/April/97