Rechercher une page de manuel
msgget
Langue: ko
Version: 1993년 11월 1일 (fedora - 25/11/07)
Section: 2 (Appels système)
이름
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일"c'est 61 francs monsieur", là bien sur j'explose de rire et je
lui propose de tout effacer. eh bien elle ma lancé un regard, j'ai
cru qu'elle allait m'étriper. il sont pas aouare chez leclerc.
Contenus ©2006-2010 Benjamin Poulain
Design ©2006-2010 Maxime Vantorre