ssize_t
msgrcv(
int msqid
, void *msgp
, size_t msgsz
, long msgtyp
, int msgflg
)
)
function receives a message from the message queue specified in
msqid
,
and places it into the user-defined structure pointed to by
msgp
.
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 to select messages.
mtext
is an array of bytes, with size up to the system limit
MSGMAX
.
The value of
msgtyp
has one of the following meanings:
msgtyp
is greater than 0.
The first message of type
msgtyp
will be received.
msgtyp
is equal to 0.
The first message on the queue will be received.
msgtyp
is less than 0.
The first message of the lowest message type that is
less than or equal to the absolute value of
msgtyp
will be received.
msgsz
specifies the maximum length of the requested message.
If the received message has a length greater than
msgsz
it will be silently truncated if the
MSG_NOERROR
flag is set in
msgflg
,
otherwise an error will be returned.
If no matching message is present on the message queue specified by
msqid
,
the behaviour of
msgrcv()
depends on whether the
IPC_NOWAIT
flag is set in
msgflg
or not.
If
IPC_NOWAIT
is set, then
msgrcv()
will immediately return a value of -1 and set
errno
to
EAGAIN
.
If
IPC_NOWAIT
is not set, the calling process will block until:
EIDRM
.
EINTR
.
If a message is successfully received, the data structure associated with
msqid
is updated as follows:
)
returns the number of bytes received into the
mtext
field of the structure pointed to by
msgp
.
Otherwise, -1 is returned, and
errno
set to indicate the error.
)
will fail if:
EINVAL
]
msqid
is not a valid message queue identifier
The message queue was removed while
msgrcv()
was waiting for a message of the requested type to become available in it.
msgsz
is less than 0.
E2BIG
]
msgsz
and the
MSG_NOERROR
flag was not set in
msgflg
.
EACCES
]
EFAULT
]
msgp
points to an invalid address.
EINTR
]
EAGAIN
]
IPC_NOWAIT
is set in
msgflg
.
EIDRM
]
msqid
is removed from the system.
ENOMSG
]
IPC_NOWAIT
is set.
AT&T
System V UNIX
.