Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>
Docbook 원문

<a href="http://www.joinc.co.kr/modules/moniwiki/wiki.php/function_semget(2)">semget</a>(2)

1장. semget(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 에러
1.5절. 예제

세마포어 설정을 확인한다.


1.1절. 사용법

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

int semget(key_t key, int nsems, int semflg)
		


1.2절. 설명

key 의 값과 일치하는 세마포어(:12) 설정확인자를 반환한다. sem_num 은 세마포어를 생성할것인지, 아니면 이미 만들어진 세마포어에 접근할것인지를 결정하기 위해서 사용한다.

semflg 는 세마포어 생성특성을 결정하기 위해서 사용한다. 즉 세마포를 생성하는데 있어서 이미 만들어진 세마포어가 있다면 어떤 행동을 취할것인지, 그리고 접근권한은 어떻게 할것인지등을 지정하기 위해서 사용한다.

만약 semflg 가 IPC_PRIVATE 가 아니고 주어진 key 값으로 이미 만들어진 세마포어와 중복되지 않으면 새로 생성될것이다. 만약 IPC_PRIVATE 이고 중복된 key 값이 있다면 생성에 실패하고 에러를 리턴할것이다.


1.3절. 반환값

성공할경우 세모포어 설정확인자(양의 정수)이며, 그렇지 않을경우 -1 이 반환되고 errno 가 설정된다.


1.4절. 에러

다양한 원인에 의해서 에러가 발생할수 있으며 아래와 같은 에러 메시지들이 있다.

EACCESS

세마포어 접근을 위한 key 가 존재하지만, 호출된 프로세스가 세마포어에 접근권한을 갖지 못할경우

EEXIST

semflg 가 IPC_CREATE 와 IPC_EXECL 로 설정되어 있고 사용된 key 가 이미 존재하는 세마포어일경우. (open(2) 의 O_CREAT 와 O_EXECL 조합과 동일한 효과이다.)

ENOMEM

세마포어 설정이 되어야 하지만 시스템에 메모리가 충분치 않아서 세마포어 설정이 안될경우

ENOSPC

세마포어 설정이 되어야 하지만 시스템의 세마포어 생성가능한 최대값 범위를 넘겨버렸을경우.


1.5절. 예제

#include <errno.h>

int main()
{
    int semid;
    int status;

    if ((semid = semget(12345, 1, IPC_CREAT|0666)) == -1)
    {
        perror("semget error ");
        return 1;
    }

    printf("success semid is %d : %d %d\n", status, semid, errno);
}
		
위의 프로그램을 실행시킨후 ipcs 로 확인해보면 아래와 같은 결과를 되돌려줄것이다.
[root@localhost root]# ipcs -s

------ Semaphore Arrays --------
key        semid      owner      perms      nsems      status      
0x00003039 32768      root      666        1