msgop(2)


msgop: msgsnd, msgrcv -- message operations

Synopsis

   #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);

Description

msgsnd sends a message to the queue associated with the message queue identifier specified by msqid. msgp points to a user defined buffer that must contain first a field of type long integer that will specify the type of the message, and then a data portion that will hold the text of the message. The following is an example of members that might be in a user defined buffer.
   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:

These actions are as follows:

On success, the following actions are taken with respect to the data structure associated with msqid [see intro(2)].

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:

msgflg specifies the action to be taken if a message of the desired type is not on the queue. These are as follows:

On success, the following actions are taken with respect to the data structure associated with msqid [see intro (2)].

Return values

On success:

On failure, msgsnd and msgrcv return -1 and set errno to identify the error.

Errors

In the following conditions, msgsnd and msgrcv fail and set errno to:

EINTR
msgsnd or msgrcv returned due to the receipt of a signal.

EIDRM
msgsnd or msgrcv returned due to removal of msqid from the system.

In the following conditions, msgsnd fails and sets errno to:


EINVAL
msqid is not a valid message queue identifier.

EACCES
Write permission is denied to the caller. [see intro(2)].

EINVAL
mtype is less than 1.

EAGAIN
The message cannot be sent for one of the reasons cited above and (msgflg&IPC_NOWAIT) is true.

EINVAL
msgsz is less than zero or greater than the system-imposed limit.

EFAULT
msgp points to an illegal address.

In the following conditions, msgrcv fails and sets errno to:


EINVAL
msqid is not a valid message queue identifier.

EACCES
Read permission is denied to the caller.

EINVAL
msgsz is less than 0.

E2BIG
The length of mtext is greater than msgsz and (msgflg&MSG_NOERROR) is false.

ENOMSG
The queue does not contain a message of the desired type and (msgtyp&IPC_NOWAIT) is true.

EFAULT
msgp points to an illegal address.

References

intro(2), msgctl(2), msgget(2), signal(2)

Notices

Considerations for threads programming

While one thread is blocked, siblings might still be executing.
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004