msgxrcv 서브루틴
용도
확장 메시지를 수신합니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
#include <sys/msg.h>
int msgxrcv (MessageQueueID, MessagePointer, MessageSize, MessageType, MessageFlag) int MessageQueueID, MessageFlag; size_t MessageSize; struct msgxbuf * MessagePointer; long MessageType;
설명
Msgxrcv 서브루틴은 MessageQueueID 매개변수로 지정된 큐에서 메시지를 읽고 MessagePointer 매개변수가 가리키는 확장 메시지 수신 버퍼에 저장합니다. 이 작업을 수행하려면 현재 프로세스에 읽기 권한이 있어야 합니다. Msgxbuf 구조는 sys/msg.h 파일에 정의되어 있습니다.
참고: 64비트 애플리케이션이 32비트 커널 인터페이스를 호출하는 경우 잘못된 포인터가 전달되면 루틴이 EFAULT를 반환하는 대신 코어 덤프할 수 있습니다.
메시지 대기열에는 다음과 같은 제한이 적용됩니다:
- 최대 메시지 크기는 4메가바이트입니다.
- 대기열당 최대 메시지 수는 8192개입니다.
- 최대 메시지 큐 ID 수는 131072입니다.
- 대기열의 최대 바이트 수는 4메가바이트입니다.
참고: 64비트 프로세스의 경우 mtype 필드의 길이는 64비트입니다. 그러나 32비트 프로세스와의 호환성을 위해 mtype 필드는 64비트로 부호가 확장된 32비트 부호 값이어야 합니다. 가장 중요한 32비트는 메시지 대기열에 넣지 않습니다. 64비트 프로세스의 경우 mtype 필드는 다시 64비트로 부호가 확장됩니다.
매개변수
| 항목 | 설명 |
|---|---|
| MessageQueueID | 메시지 큐 식별자를 지정합니다. |
| MessagePointer | 메시지가 저장되는 확장 메시지 수신 버퍼에 대한 포인터를 지정합니다. |
| MessageSize | 의 크기를 지정합니다mtext필드를 바이트 단위로 입력합니다. 수신 메시지가 MessageSize 매개변수보다 크고 MSG_NOERROR 값이 true인 경우 MessageSize 매개변수에 지정된 크기로 잘립니다. 메시지의 잘린 부분은 손실되며 호출 프로세스에 잘린 부분에 대한 표시가 제공되지 않습니다. 메시지가 MessageSize 매개변수에 지정된 바이트 수보다 길고 MSG_NOERROR 값이 설정되지 않은 경우, msgxrcv 서브루틴은 실패하고 errno 전역 변수를 E2BIG 오류 코드로 설정합니다. |
| MessageType | 다음과 같이 요청된 메시지 유형을 지정합니다:
|
| MessageFlag | 0 값 또는 다음 값 중 하나 이상을 논리적으로 OR하여 구성한 값을 지정합니다:
|
리턴 값
성공적으로 완료되면 msgxrcv 서브루틴은 실제로 저장된 바이트 수와 동일한 값을 반환합니다mtextfield, and the following actions are taken with respect to the data structure associated with the MessageQueueID parameter:
- 다음msg_qnum필드가 1씩 감소합니다.
- 다음msg_lrpid필드는 호출 프로세스의 프로세스 ID와 동일하게 설정됩니다.
- 다음msg_rtime필드는 현재 시간과 동일하게 설정됩니다.
Msgxrcv 서브루틴이 실패하면 -1 값이 반환되고 errno 전역 변수가 오류를 나타내도록 설정됩니다.
오류 코드
다음 조건 중 하나라도 해당하면 msgxrcv 서브루틴은 실패합니다:
| 항목 | 설명 |
|---|---|
| EINVAL | MessageQueueID 매개 변수가 유효한 메시지 큐 식별자가 아닙니다. |
| EACCES | 호출 프로세스에 지정된 작업에 대한 권한이 거부됩니다. |
| EINVAL | MessageSize 매개 변수가 0보다 작습니다. |
| E2BIG | 다음mtext필드가 MessageSize 매개 변수보다 크고 MSG_NOERROR 값이 설정되지 않은 경우입니다. |
| ENOMSG | 대기열에 원하는 유형의 메시지가 포함되어 있지 않고 IPC_NOWAIT 값이 설정되어 있습니다. |
| 기본값 | MessagePointer 매개변수는 프로세스 주소 공간 외부를 가리킵니다. |
| EINTR | Msgxrcv 서브루틴이 신호에 의해 중단되었습니다. |
| EIDRM | MessageQueueID 매개변수로 지정된 메시지 큐 식별자가 시스템에서 제거됩니다. |