SEMCTL(2) | Linux Programmer's Manual | SEMCTL(2) |
이름¶
semctl - 세마포어 제어기.
사용법¶
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED) /* union semun is defined by including <sys/sem.h> */ #else /* according to X/OPEN we have to define it ourselves */ union semun {
int val; /* SETVAL을 위한값 */
struct semid_ds *buf; /* IPC_STAT, IPC_SET을 위한 버퍼 */
unsigned short int *array; /* GETALL, SETALL을 위한 배열 */
struct seminfo *__buf; /* IPC_INFO을 위한 버퍼 */ }; #endif
int semctl (int semid, int semnum, int cmd, union semun arg)
설명¶
semctl 함수는 semid 가 가리키는 세마포어 집합, 혹은 이 집합의 semnum 번째 세마포어(세마포어는 0 번부터 시작한다.)에 cmd 가 지정하는 제어작용을 실행한다.
cmd 가 갖는 값은 다음과 같다.
- IPC_STAT
- arg.buf 포인터가 가리키는 구조체에 세마포어 집합의 데이타 구조 정보를 복사한다. semnum 인수는 무시된다. 호출한 프로세스는 세마포어 설정에 읽기권한이 있어야한다.
- IPC_RMID
- 세마포어 집합과 데이타 구조를 즉시 제거하고, 모든 대기중인 프로세스들을 재실행한다. 호출한 프로세스의 유효 사용자ID는 수퍼유저나 세마포어 집합의 생성자 혹은 소유자중의 하나여야 한다. 인수 semnum 는 무시된다.
- GETALL
- 집합의 모든 세마포어에 대한 semval 값을 arg.array. 에 저장한다. 변수 semnum 는 무시된다. 호출한 프로세스는 세마포어설정에 읽기 권한이 있어야한다.
- GETNCNT
- semnum 번째 세마포어의 semncnt 값을 반환한다. 이 값은 세마포어의 semval 값이 증가하기를 기다리고 있는 프로세스의 수를 나타낸다. 호출한 프로세스는 세마포어 설정에 읽기 권한이 있어야한다.
- GETPID
- 세마포어 호출은 sempid 의 값을 반환한다. 이 값은 가장 최근에 해당 세마포어에 semop 호출을 했던 프로세스의 pid를 나타낸다. 호출한 프로세스는 세마포어 설정에 읽기 권한이 있어야한다.
- GETVAL
- 집합의 semnum 번째 세마포어에 대한 semval 의 값을 반환한다. 호출 프로세스는 세마포어 설정에 대한 읽기 접근에 있어 특별한 권한을 갖고 있어야 한다.
- GETZCNT
- 시스템 호출은 집합의 semnum 번째 세마포어에 대한 semzcnt 의 값을 반환한다.이 값은 세마포어의 semval 값이 0이 되기를 기다리고 있는 프로세스의 수를 나타낸다. 호출 프로세스는 세마포어 설정에 대한 읽기 접근 권한들을 갖고 있어야 한다.
- SETALL
- arg.array 인수 배열을 사용하여 집합의 모든 세마포어의 semval 값을 설정한다. 집합과 관련된 semid_ds 구조체의 sem_ctime 멤버를 또한 업데이트한다. 모든 프로세스에서 변경된 세마포어에 대해 Undo 엔트리들은 소거된다. 대기열에서 유휴중인 프로세스들은 일부 semval 이 0이 되거나, 증가하면, 다시 활성화된다. 인수 semnum 은 무시된다. 호출 프로세스는 세마포어 설정에 대한 변경 접근 권한을 갖고 있어야 한다.
- SETVAL
- arg.val 값을 사용하여 집합의 semnum 번째 세마포어의 semval 값을 설정한다. semid_ds 구조의 sem_ctime 멤버를 또한 업데이트시킨다. 모든 프로세스에서 변경된 세마포어에 대해 Undo 엔트리들은 소거된다. 대기열에서 유휴중인 프로세스들은 semval 이 0이 되거나, 증가하면, 다시 활성화된다. 인수 semnum 은 무시된다. 호출 프로세스는 세마포어 설정에 대한 변경 접근 권한을 갖고 있어야 한다.
반환값¶
실패하면, 시스템 호출은 에러를 가리키는 errno 와 함께 -1 를 리턴한다. 그렇지 않으면, 시스템 호출은 아래와 같이 cmd 에 따라 음수값이 아닌 값을 리턴한다.
에러¶
실패 리턴에 대하여, errno 는 다음의 값들중 하나로 설정될 것이다.:
- EACCES
- 호출 프로세스는 cmd 를 실행하는데 필요한 접근 권한을 갖고 있지 않는다.
- EFAULT
- arg.buf 에 의해 가리키는 주소나 arg.array 는 접근이 불가능하다.
- EIDRM
- 세마포어 설정은 삭제되었다.
- EINVAL
- cmd 또는 semid 에 대한 부적절한 값.
- EPERM
- 인수 cmd 가 IPC_SET 또는 IPC_RMID 값을 갖지만, 호출 프로세스 유효 사용자 ID는 명령을 실행시킬 수 있는 충분치 않은 특권들을 갖는다.
- ERANGE
- 인수 cmd 는 SETALL 또는 SETVAL를 갖고, and the value to which semval 가 0보다 적고 구현 값보다 더 크게 설정되어야 하는 값을 갖는다. SEMVMX.
주의¶
IPC_INFO, SEM_STAT 그리고 SEM_INFO 제어 호출들은 할당된 자원들에 정보를 제공하는 ipcs(8) 프로그램에 의해 사용된다.
세마포어 설정에 대한 다음의 시스템 제한은 semctl 호출에 영향을 미친다.
- SEMVMX
- semval 에 대한 최대값은 구현에 의존적이다 (32767).
호환¶
SVr4, SVID. SVr4는 에러 조건 EINVAL과 EOVERFLOW에 대한 문서를 작성한다.
관련 항목¶
번역¶
ASPLINUX<man@asp-linux.co.kr> 2000년 7월
29일
배성훈 <plodder@kldp.org> 2000년 11월
18일
한글 Manpage 프로젝트
(http://man.kldp.org) 2005년 2월 14일
November 1, 1993 | Linux 0.99.13 |