SHMGET(2)

명칭
shmget - 공유 메모리의 식별자의 취득

프로그램 라이브러리
libc

서식
<machine/param.h> <sys/types.h> <sys/ipc.h> <sys/shm.h> int shmget(key_t key, int size, int flag)

해설
shmget() (은)는, key (와)과 flag 의 값에 따라, 새롭게 작성한 공유 메모리세그먼트 또는 기존의 공유 메모리세그먼트의 식별자를 되돌립니다. 키는 파일명을 닮은 것으로, IPC 오브젝트를 지정하는 핸들을 제공하는 것입니다. 키의 지정 방법에는 3 개 방법이 있습니다.

•   IPC_PRIVATE 를 지정하면(자) 새로운 IPC 오브젝트가 작성됩니다.

•   정정수를 지정할 수 있습니다. key 에 대응하는 IPC 오브젝트가 지정되지 않고, IPC_CREAT 비트가 flag 그리고 설정되어 있는 경우는, 새로운 IPC 오브젝트가 작성됩니다.

•   ftok() (을)를 사용해, 패스명으로부터 키를 작성할 수 있습니다. ftok(3) (을)를 참조해 주세요.

새롭게 작성된 IPC 오브젝트의 모드는, flag 파라미터에 건네주는 이하의 정수의 논리합으로 정해집니다.

SHM_R
    유저용의 읽기 액세스

SHM_W
    유저용의 기록 액세스

(SHM_R>>3)
    그룹용의 읽기 액세스

(SHM_W>>3)
    그룹용의 기록 액세스

(SHM_R>>6)
    그 외용의 읽기 액세스

(SHM_W>>6)
    그 외용의 기록 액세스

새로운 공유 메모리세그먼트를 작성하는 경우, size (은)는, 새로운 세그먼트(segment)의 바이트 단위의 사이즈를 나타냅니다. 세그먼트(segment)의 사이즈는, 커널에 편리하게 있는 배수에 끝맺을 수 있는 일이 있습니다 (즉 페이지 사이즈).

반환값
처리가 정상적으로 완료하면(자), shmget() (은)는 공유 메모리세그먼트의 정정수의 식별자를 돌려줍니다. 그렇지 않은 경우는 -1 이 돌려주어져 에러를 나타내기 위해서(때문에) errno 하지만 설정됩니다.

에러
이하의 경우, shmget() (은)는 처리를 실패합니다.

[EINVAL]
    지정한 사이즈가, 기존 세그먼트(segment)의 사이즈보다 큽니다. 지정한 사이즈가, 시스템의 최저치보다 작은지, 최대치보다 큽니다.

[ENOENT]
    key (와)과 일치하는 공유 메모리세그먼트가 없고, IPC_CREAT 가 지정되어 있지 않습니다.

[ENOSPC]
    요구를 채우는 충분한 메모리를, 커널을 할당할 수 없습니다.

[EEXIST]
    IPC_CREAT 와 IPC_EXCL 가 지정되어 key 에 대응하는 공유 메모리세그먼트가 벌써 존재합니다.

관련 항목
shmat(2), shmctl(2), shmdt(2), ftok(3)