The msgsnap() function reads all of the messages
of type msgtyp from the queue associated with the
message queue identifier specified by msqid and places
them in the user-defined buffer pointed to by buf.
The buf argument points to a user-defined buffer
that on return will contain first a buffer header structure:
|
struct msgsnap_head {
size_t msgsnap_size; /* bytes used/required in the buffer */
size_t msgsnap_nmsg; /* number of messages in the buffer */
};
|
followed by msgsnap_nmsg messages, each of which
starts with a message header:
|
struct msgsnap_mhead {
size_t msgsnap_mlen; /* number of bytes in the message */
long msgsnap_mtype; /* message type */
};
|
and followed by msgsnap_mlen bytes containing the
message contents.
Each subsequent message header is located at the first byte following
the previous message contents, rounded up to a sizeof(size_t)
boundary.
The bufsz argument specifies the size of buf in bytes. If bufsz is less than sizeof(msgsnap_head), msgsnap() fails with EINVAL. If bufsz is insufficient to
contain all of the requested messages, msgsnap() succeeds
but returns with msgsnap_nmsg set to 0 and with msgsnap_size set to the required size of the buffer in bytes.
The msgtyp argument specifies the types of
messages requested as follows:
- If msgtyp is 0, all of the messages
on the queue are read.
- If msgtyp is greater than 0, all
messages of type msgtyp are read.
- If msgtyp is less than 0, all messages
with type less than or equal to the absolute value of msgtyp are read.
The msgsnap() function is a non-destructive operation.
Upon completion, no changes are made to the data structures associated
with msqid.
|