Manpages

이 름

msgget − 메 세 지 큐 식 별 자 를 가 져 온 다 .

사 용 법

# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/msg.h>

int msgget ( key_t key, int msgflg )

설 명

이 함 수 는 key 값 과 관 련 된 메 세 지 큐 식 별 자 를 반 환 한 다 . 만 일 , keyIPC_PRIVATE 값 을 가 지 고 있 거 나 또 는 keyIPC_PRIVATE가 아 니 고 , key와 연 계 되 어 있 는 메 세 지 큐 가 없 다 면 새 로 운 메 세 지 큐 가 만 들 어 지 며 IPC_CREATmsgflg에 명 시 되 어 있 다 . (i.e. msgflg&IPC_CREAT 는 0이 아 니 다 .)

msgflg에 존 재 하 는 IPC_CREATIPC_EXCL 필 드 는 open(2)시 스 템 호 출 의 모 드 인 자 에 서 O_CREATO_EXCL이 있 는 것 처 럼 메 세 지 큐 의 존 재 에 대 해 같 은 역 할 을 한 다 .: 만 일 msgflgIPC_CREATIPC_EXCL이 고 key를 위 한 메 세 지 큐 가 이 미 존 재 한 다 면 , msgget 시 스 템 콜 은 실 패 한 다 .

생 성 시 , msgflg 인 자 의 하 위 9비 트 는 메 세 지 큐 에 대 한 접 근 허 가 권 을 정 의 한 다 . 이 허 가 권 은 open(2)이 나 creat(2)시 스 템 콜 에 있 는 접 근 허 가 권 과 같 은 형 태 , 같 은 의 미 를 가 진 다 . (실 행 허 가 권 은 사 용 되 지 않 는 다 .)

더 군 다 나 , 생 성 하 는 동 안 , 시 스 템 콜 은 다 음 과 같 은 시 스 템 메 세 지 큐 데 이 터 구 조 체 msqid_ds를 초 기 화 한 다 .

msg_perm.cuidmsg_perm.uid는 호 출 프 로 세 스 의 유 효 사 용 자 −ID로 설 정 된 다 .

msg_perm.cgidmsg_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에 해 당 하 는 메 세 지 큐 가 존 재 하 며 msgflgIPC_CREATIPC_EXCL를 모 두 가 지 고 있 다 .

EIDRM

메 세 지 큐 가 제 거 되 도 록 표 시 되 어 있 다 .

ENOENT

key에 해 당 하 는 메 세 지 큐 가 존 재 하 지 않 으 며 msgflgIPC_CREAT가 존 재 하 지 않 는 다 .

ENOMEM

메 세 지 큐 가 만 들 어 졌 지 만 시 스 템 은 새 로 운 데 이 터 구 조 를 위 한 메 모 리 공 간 이 충 분 하 지 않 다 .

ENOSPC

메 세 지 큐 가 만 들 어 졌 지 만 시 스 템 제 한 값 인 메 세 지 큐 의 최 대 수 (MSGMNI)를 초 과 했 다 .

주 의

IPC_PRIVATE는 플 래 그 필 드 가 아 니 고 key_t 타 입 이 다 . 이 특 별 한 값 이 key에 사 용 된 다 면 , 시 스 템 콜 은 msgflg의 하 위 8비 트 를 제 외 한 모 든 것 을 무 시 한 다 . 그 리 고 성 공 시 새 로 운 메 세 지 큐 를 생 성 한 다 .

다 음 은 msgget 함 수 에 영 향 을 주 는 메 세 지 큐 자 원 에 대 한 시 스 템 제 한 값 이 다 :

MSGMNI

메 세 지 큐 의 시 스 템 최 대 수 : 정 책 에 의 존 적 이 다 .

버 그

IPC_PRIVATE의 사 용 은 할 당 된 메 세 지 큐 에 접 근 하 는 다 른 프 로 세 스 를 실 제 로 막 지 못 한 다 .

파 일 에 서 처 럼 메 세 지 큐 에 배 타 적 접 근 을 보 장 하 도 록 프 로 세 스 를 위 한 내 부 적 방 법 은 없 다 . 단 지 msgflgIPC_CREATIPC_EXCL를 명 시 하 는 것 이 새 로 운 메 세 지 큐 가 생 성 되 었 다 는 것 을 보 장 하 지 만 (성 공 시 ) 이 것 이 메 세 지 큐 에 대 한 배 타 적 접 근 을 암 시 하 는 것 은 아 니 다 .

호 환

SVr4, SVID. SVr4 는 EIDRM 에 러 코 드 를 문 서 화 하 지 않 았 다 .

관 련 항 목

ftok(3), ipc(5), msgctl(2), msgsnd(2), msgrcv(2)

번 역

정 강 훈 <skyeyes [AT] soback.net> 2000년 6월 19일
한 글 Manpage 프 로 젝 트 (http://man.kldp.org) 2005년 2월 15일