sem_open 서브루틴
용도
명명된 세마포어를 초기화하고 엽니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
#include <semaphore.h>
sem_t * sem_open (const char *name, int oflag, mode_t mode, unsigned value)
설명
Sem_open 서브루틴은 명명된 세마포어와 프로세스 간의 연결을 설정합니다. 세마포어 이름으로 sem_open 서브루틴을 호출한 후 프로세스는 호출에서 반환된 주소를 사용하여 세마포어를 참조할 수 있습니다. 이 세마포어는 sem_wait, sem_trywait, sem_post 및 sem_close 서브루틴의 후속 호출에 사용될 수 있습니다. 세마포어는 sem_close, _exit 또는 실행 서브루틴 중 하나를 성공적으로 호출하여 세마포어가 닫힐 때까지 이 프로세스에서 계속 사용할 수 있습니다.
Name 매개변수는 세마포어 객체의 이름을 지정하는 문자열을 가리킵니다. 이 이름은 파일 시스템에 표시되지 않습니다. 이름 매개변수는 경로명에 대한 구성 규칙을 따릅니다. 슬래시 문자로 시작할 수 있으며 하나 이상의 문자를 포함해야 합니다. 동일한 이름의 값을 가진 sem_open() 을 호출하는 프로세스는 해당 이름이 제거되지 않은 한 동일한 세마포어 객체를 참조합니다.
프로세스가 이름 매개변수의 값이 동일한 sem_open 서브루틴을 여러 번 성공적으로 호출하는 경우, 이 세마포어에 대한 sem_unlink 서브루틴 호출이 없는 한, 각 성공적인 호출에 대해 동일한 세마포어 주소가 반환됩니다.
매개변수
| 항목 | 설명 |
|---|---|
| 이름 | 세마포어 객체의 이름을 지정하는 문자열을 가리킵니다. |
| oflag | 세마포어를 생성할지, 아니면 sem_open 서브루틴 호출에 의해 단순히 액세스할지 제어합니다. 다음의 플래그 비트는 oflag 파라미터에 설정할 수 있습니다:
|
| 모드 | 파일 권한 비트의 값을 지정합니다. 메시지 큐를 만들 때 O_CREAT와 함께 사용됩니다. |
| 값 | 초기 값을 지정합니다. 메시지 큐를 만들 때 O_CREAT와 함께 사용됩니다. |
리턴 값
성공적으로 완료되면 sem_open 서브루틴은 세마포어의 주소를 반환합니다. 그렇지 않으면 SEM_FAILED 값을 반환하고 errno를 설정하여 오류를 표시합니다. SEM_FAILED 심볼은 semaphore.h 헤더 파일에 정의되어 있습니다. Sem_open 서브루틴에서 성공적으로 반환되지 않으면 SEM_FAILED 값이 반환됩니다.
오류 코드
| 항목 | 설명 |
|---|---|
| EACCES | 명명된 세마포어가 존재하며 오브젝트 지연으로 지정된 권한이 거부됩니다. |
| EEXIST | O_CREAT 및 O_EXCL 플래그가 설정되어 있고 명명된 세마포어가 이미 존재합니다. |
| 기본값 | 잘못된 사용자 주소입니다. |
| EINVAL | 주어진 이름에 대해 sem_open 서브루틴이 지원되지 않거나, oflag 매개변수에 O_CREAT 플래그가 지정되었고 값이 SEM_VALUE_MAX보다 큰 경우입니다. |
| EMFILE | 현재 이 프로세스에서 너무 많은 세마포어 기술자가 사용되고 있습니다. |
| ENAMETOOLONG | 이름 매개변수의 길이가 PATH_MAX를 초과하거나 경로 이름 구성 요소가 NAME_MAX보다 깁니다. |
| ENFILE | 현재 시스템에 너무 많은 세마포어가 열려 있습니다. |
| ENOENT | O_CREAT 플래그가 설정되지 않았고 명명된 세마포어가 존재하지 않습니다. |
| ENOMEM | 필요한 작업에 필요한 메모리가 부족합니다. |
| ENOTSUP | 이 기능은 체크포인트 재시작된 프로세스에서는 지원되지 않습니다. |
| ENOSPC | 새 명명된 세마포어를 생성할 공간이 부족합니다. |