MSGGET(3)

명칭
msgget - 메시지 큐의 취득

프로그램 라이브러리
libc

서식
<sys/types.h> <sys/ipc.h> <sys/msg.h> int msgget(key_t key, int msgflg)

해설
msgget() (은)는, key 에 관련하는 메시지 큐 ID 를 되돌립니다. 메시지 큐 ID 는, 0 보다 큰 일의적인 정수입니다.

메시지 큐는, key 하지만 IPC_PRIVATE (와)과 동일한 경우, 또는 key 에 관련하는 메시지 큐 ID 가 존재하지 않고, 한편, IPC_CREAT 비트가 msgflg 그리고 설정되어 있는 경우에 작성됩니다.

새로운 메시지 큐가 작성되었을 경우, 관련하는 데이터 구조 ( msqid_ds 구조체. msgctl(3) 참조)는, 이하와 같이 초기화됩니다.

•   msg_perm.cuid (와)과 msg_perm.uid (은)는, 호출 프로세스의 실효 유저 ID 로 설정됩니다.

•   msg_perm.gid (와)과 msg_perm.cgid (은)는, 호출 프로세스의 실효 그룹 ID 로 설정됩니다.

•   msg_perm.mode (은)는, msgflg 의 하위 9 비트가 설정됩니다.

•   msg_cbytes, msg_qnum, msg_lspid, msg_lrpid, msg_rtime, msg_stime 에는 0 이 설정됩니다.

•   msg_qbytes (은)는, 큐의 바이트수 (MSGMNB) 에 대한 시스템의 최대치가 설정됩니다.

•   msg_ctime (은)는, 현재의 시각으로 설정됩니다.

반환값
문제 없게 종료하면(자), 정의 메시지 큐 ID 가 되돌려집니다. 문제 없고 종료하지 않으면 -1 이 되돌려져 글로벌 변수 errno 하지만 그 에러를 나타내도록(듯이) 설정됩니다.

에러

[EACESS]
    메시지 큐가 key (와)과 벌써 관련하고 있습니다만, 소환 측에 액세스권이 없습니다.

[EEXIST]
    IPC_CREAT (와)과 IPC_EXCL 의 양쪽 모두가 msgflg 그리고 설정되어 있어 메시지 큐가 key (와)과 벌써 관련하고 있습니다.

[ENOSPC]
    메시지 큐의 수에 관한 시스템 제한에 이르고 있기 (위해)때문에, 새로운 메시지 큐를 작성할 수 없습니다.

[ENOENT]
    msgflg 에 IPC_CREAT 하지만 설정되어 있지 않은 상황으로, key 에 관련하는 메시지 큐가 발견되지 않습니다.

관련 항목
msgctl(3), msgrcv(3), msgsnd(3)

역사
메시지 큐는, AT&T UNIX 의 최초의 릴리스에 추가되었습니다.