MSGGET
Section: 리눅스 프로그래머 매뉴얼 (2)
Updated: 1993년 11월 1일
Index
Return to Main Contents
이름
msgget - 메세지 큐 식별자를 가져온다.
사용법
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/msg.h>
int msgget ( key_t key,
int msgflg )
설명
이 함수는
key
값과 관련된 메세지 큐 식별자를 반환한다.
만일,
key가
IPC_PRIVATE
값을 가지고 있거나 또는
key가
IPC_PRIVATE가
아니고,
key와
연계되어 있는 메세지 큐가 없다면 새로운 메세지 큐가 만들어지며
IPC_CREAT는
msgflg에
명시되어 있다.
(i.e.
msgflg&IPC_CREAT
는 0이 아니다.)
msgflg에
존재하는
IPC_CREAT와
IPC_EXCL
필드는
open(2)시스템
호출의 모드 인자에서
O_CREAT와
O_EXCL이
있는 것처럼 메세지 큐의 존재에 대해 같은 역할을 한다.:
만일
msgflg가
IPC_CREAT와
IPC_EXCL이고
key를
위한 메세지 큐가 이미 존재한다면,
msgget
시스템 콜은 실패한다.
생성시,
msgflg
인자의 하위 9비트는 메세지 큐에 대한 접근 허가권을 정의한다.
이 허가권은
open(2)이나
creat(2)시스템
콜에 있는 접근 허가권과 같은 형태, 같은 의미를 가진다.
(실행 허가권은 사용되지 않는다.)
더군다나, 생성하는 동안,
시스템 콜은 다음과 같은 시스템 메세지 큐 데이터 구조체
msqid_ds를
초기화 한다.
-
msg_perm.cuid와
msg_perm.uid는
호출 프로세스의 유효 사용자-ID로 설정된다.
-
msg_perm.cgid와
msg_perm.gid는
호출 프로세스의 유효 그룹-ID로 설정된다.
-
msg_perm.mode의
하위 9비트는
msgflg의
하위 9비트로 설정된다.
-
msg_qnum,
msg_lspid,
msg_lrpid,
msg_stime
그리고
msg_rtime는
0으로 설정된다.
-
msg_ctime은
현재 시간으로 설정된다.
-
msg_qbytes는
시스템 제한값
MSGMNB으로
설정된다.
만일 메세지 큐가 이미 존재한다면 접근 허가권을 검증하고,
메시지 큐가 소멸되도록 설정되어 있는지를 알아본다.
반환값
성공시, 반환값은 메세지 큐 식별자(비 음수 정수)가 되며, 그렇지 않으면
에러를 가리키는
errno와함께
-1이
반환된다.
에러
실패시,
errno는
다음 값 중 하나로 설정된다.:
- EACCES
-
key에
해당 하는 메세지 큐가 존재하지만 호출 프로세스가 큐에 대한 접근 허가권을 가지고 있지 않다.
- EEXIST
-
key에
해당하는 메세지 큐가 존재하며
msgflg가
IPC_CREAT와
IPC_EXCL를
모두 가지고 있다.
- EIDRM
-
메세지 큐가 제거되도록 표시되어 있다.
- ENOENT
-
key에
해당하는 메세지 큐가 존재하지 않으며
msgflg에
IPC_CREAT가
존재하지 않는다.
- ENOMEM
-
메세지 큐가 만들어 졌지만 시스템은 새로운 데이터 구조를 위한 메모리 공간이
충분하지 않다.
- ENOSPC
-
메세지 큐가 만들어 졌지만 시스템 제한 값인 메세지 큐의 최대 수
(MSGMNI)를
초과했다.
주의
IPC_PRIVATE는
플래그 필드가 아니고
key_t
타입이다.
이 특별한 값이
key에
사용된다면, 시스템 콜은
msgflg의
하위 8비트를 제외한 모든 것을 무시한다.
그리고 성공시 새로운 메세지 큐를 생성한다.
다음은
msgget
함수에 영향을 주는 메세지 큐 자원에 대한 시스템 제한값이다:
- MSGMNI
-
메세지 큐의 시스템 최대 수 : 정책에 의존적이다.
버그
IPC_PRIVATE의
사용은 할당된 메세지 큐에 접근하는 다른 프로세스를 실제로 막지 못한다.
파일에서처럼 메세지 큐에 배타적 접근을 보장하도록 프로세스를 위한 내부적
방법은 없다.
단지
msgflg에
IPC_CREAT와
IPC_EXCL를
명시하는 것이 새로운 메세지 큐가 생성되었다는 것을 보장하지만(성공시)
이것이 메세지 큐에 대한 배타적 접근을 암시하는 것은 아니다.
호환
SVr4, SVID. SVr4 는 EIDRM 에러 코드를 문서화하지 않았다.
관련 항목
ftok(3),
ipc(5),
msgctl(2),
msgsnd(2),
msgrcv(2)
번역
정강훈 <skyeyes@soback.kornet.net> 2000년 6월 19일
한글 Manpage 프로젝트 (http://man.kldp.org) 2005년 2월 15일
Index
- 이름
-
- 사용법
-
- 설명
-
- 반환값
-
- 에러
-
- 주의
-
- 버그
-
- 호환
-
- 관련 항목
-
- 번역
-
This document was created by
man2html,
using the manual pages.
Time: 11:22:56 GMT, February 15, 2005