SEMGET(2)

명칭
semget - semaphore ID 를 취득한다

프로그램 라이브러리
libc

서식
<sys/types.h> <sys/ipc.h> <sys/sem.h> int semget(key_t key, int nsems, int flag)

해설
key (와)과 flag 의 값에 근거해, semget() (은)는 새롭게 작성된, 혹은 이전부터 존재하는 semaphore 집합의 식별자를 돌려줍니다. 키는 파일명에 유사하고 있습니다. 키는 IPC 오브젝트에 이름을 붙이는 핸들을 제공합니다. 키를 지정하는 방법은 3 개 있습니다.

•   IPC_PRIVATE (을)를 지정할 수 있습니다. 이 경우, 새로운 IPC 오브젝트가 작성됩니다.

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

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

새롭게 작성된다 IPC 오브젝트의 모드는, 다음의 정수의 논리합 ( OR )(을)를 flag 파라미터로 설정하는 것으로 결정됩니다.

SEM_R
    유저용의 읽기 액세스

SEM_A
    유저용의 갱신 액세스

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

(SEM_A>>3)
    그룹용의 갱신 액세스

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

(SEM_A>>6)
    그 외용의 갱신 액세스

새로운 semaphore 집합이 작성되고 있는 경우, nsems (을)를 사용해, 집합안에 넣을 필요가 있다 semaphore의 수를 나타냅니다. 그렇지 않은 경우, nsems (을)를 0 으로서 지정할 수 있습니다.

반환값
semget() (은)는, 정상적으로 완료하면(자) semaphore 집합의 식별자를 돌려줍니다. 그렇지 않은 경우는,-1 을 돌려주어, 에러를 나타내도록(듯이) errno (을)를 설정합니다.

에러
semget() (은)는 다음의 경우에 처리에 실패합니다.

[EACCES]
    액세스 퍼미션 장해.

[EEXIST]
    IPC_CREAT 및 IPC_EXCL 하지만 지정되어 있는데, key 에 대응하는 semaphore 집합이 이미 존재합니다.

[EINVAL]
    요구된 semaphore의 수가, 시스템이 집합 단위로 부과하고 있는 최대치를 초과하고 있습니다.

[ENOSPC]
    이용 가능한 semaphore가 부족합니다.

[ENOSPC]
    커널이 struct semid_ds (을)를 할당 할 수 없었습니다.

[ENOENT]
    key 에 대응하는 semaphore 집합이 발견되지 않고, 그 때에 IPC_CREAT 하지만 지정되어 있지 않았습니다.

관련 항목
semctl(2), semop(2), ftok(3)