msgrcv Subroutine
Purpose
Reads a message from a queue.
Library
Standard C Library (libc.a)
Syntax
#include <sys/msg.h>
int msgrcv (MessageQueueID, MessagePointer,MessageSize,MessageType, MessageFlag)
int MessageQueueID, MessageFlag;
void * MessagePointer;
size_t MessageSize;
long int MessageType;
Description
The msgrcv subroutine reads a message from the queue specified by the MessageQueueID parameter and stores it into the structure pointed to by the MessagePointer parameter. The current process must have read permission in order to perform this operation.
Limits on message size and number of messages in the queue can be found in General Programming Concepts: Writing and Debugging Programs.
Parameters
Item | Description |
---|---|
MessageQueueID | Specifies the message queue identifier. |
MessagePointer | Points to a msgbuf structure containing the message.
The msgbuf structure is defined in the sys/msg.h file
and contains the following fields:
The mtype field contains the type of the received message as specified by the sending process. The mtext field is the text of the message. |
MessageSize | Specifies the size of the mtext field in bytes. The received message is truncated to the size specified by the MessageSize parameter if it is longer than the size specified by the MessageSize parameter and if the MSG_NOERROR value is set in the MessageFlag parameter. The truncated part of the message is lost and no indication of the truncation is given to the calling process. |
MessageType | Specifies the type of message requested as follows:
|
MessageFlag | Specifies either a value of 0 or is constructed by logically
ORing one or more of the following values:
|
Return Values
Upon successful completion, the msgrcv subroutine returns a value equal to the number of bytes actually stored into the mtext field and the following actions are taken with respect to fields of the data structure associated with the MessageQueueID parameter:
- The msg_qnum field is decremented by 1.
- The msg_lrpid field is set equal to the process ID of the calling process.
- The msg_rtime field is set equal to the current time.
If the msgrcv subroutine is unsuccessful, a value of -1 is returned and the errno global variable is set to indicate the error.
Error Codes
The msgrcv subroutine is unsuccessful if any of the following conditions is true:
Item | Description |
---|---|
EINVAL | The MessageQueueID parameter is not a valid message queue identifier. |
EACCES | The calling process is denied permission for the specified operation. |
E2BIG | The mtext field is greater than the MessageSize parameter, and the MSG_NOERROR value is not set. |
ENOMSG | The queue does not contain a message of the desired type and the IPC_NOWAIT value is set. |
EFAULT | The MessagePointer parameter points outside of the allocated address space of the process. |
EINTR | The msgrcv subroutine is interrupted by a signal. |
EIDRM | The message queue identifier specified by the MessageQueueID parameter has been removed from the system. |