semctl

Autres langues

Langue: ko

Version: November 1, 1993 (fedora - 25/11/07)

Section: 2 (Appels système)

이름

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)

설명

기능은 세마포어 세트에 cmd 에 의해 지정된 제어작용을 실행한다. 세트의 첫 세마포어은 semnum 을 위한 값 0 에 의해 지시된다.

cmd 을 위한 값은 다음과 같다.

IPC_STAT
세마포어로부터 복사 정보는 arg.buf 에 의해 지정되는 구조에 데이타 구조를 설정한다. 인수 semnum 는 무시된다. 호출한 프로세스는 세마포어 설정에 읽기권한이 있어야한다.
IPC_RMID
세마포어 설정을 즉시 제거하고, 그것의 데이타 구조는 모든 대기중인 프로세스들을 재실행한다. 호출한 프로세스 유효 사용자ID는 수퍼유저나 세마포어설정의 생성, 소유자중의 하나이어야한다. 인수 semnum 는 무시된다.
GETALL
arg.array. 인수에 설정된 모든 세마포어 위한 semval 를 반환한다. 변수 The argument semnum 는 무시된다. 호출한 프로세스는 세마포어설정에 읽기 권한이 있어야한다.
GETNCNT
시스템 호출은 semncnt 의 값을 반환한다. 호출한 프로세스는 세마포어 설정에 읽기 권한이 있어야한다.
GETPID
세마포어 호출은 sempid 의 값을 반환한다. 호출한 프로세스는 세마포어 설정에 읽기 권한이 있어야한다.
GETVAL
시스템 호출은 설정의 .IR semnum -th 세마포어에 대한 semval 의 값을 리턴한다. 호출 프로세스는 세마포어 설정에 대한 읽기 접근에 있어 특별한 권한을 갖고 있어야 한다.
GETZCNT
시스템 호출은 설정의 .IR semnum -th 세마포어에 대한 semzcnt의 값을 리턴한다. 호출 프로세스는 세마포어 설정에 대한 읽기 접근 권한들을 갖고 있어야 한다.
SETALL
인수배열을사용하고,설정과관련된.Bsemid_ds구조의.Bsem_ctime멤버를또한업데이트시킴으로서
 설정의 모든 세마포어에 대한 .B semval을 설정한다..  모든 프로세스에서 변경된 세마포어에 대해 Undo 엔트리들은 소거된다. 대기열에서 유휴중인 프로세스들은 일부 .B semval이 0이 되거나, 증가하면, 다시 활성화된다. 인수 .I semnum은 무시된다. 호출 프로세스는 세마포어 설정에 대한 변경 접근 권한을 갖고 있어야 한다.
SETVAL
설정과 관련된 .B semid_ds 구조의 .B sem_ctime 멤버를 또한 업데이트시킴으로서,
 semval의 값을 설정의 .IR semnum -th 세마포어에 대한 .IB arg .val로 설정한다.  모든 프로세스에서 변경된 세마포어에 대해 Undo 엔트리들은 소거된다. 대기열에서 유휴중인 프로세스들은 일부 .B semval이 0이 되거나, 증가하면, 다시 활성화된다. 인수 .I semnum은 무시된다. 호출 프로세스는 세마포어 설정에 대한 변경 접근 권한을 갖고 있어야 한다.

반환값

실패하면, 시스템 호출은 에러를 가리키는 .B errno와 함께 .B -1를 리턴한다. 그렇지 않으면, 시스템 호출은 아래와 같이 .I cmd에 따라 음수값이 아닌 값을 리턴한다.
GETNCNT
semncnt의.
GETPID
sempid의.
GETVAL
semval의값.
GETZCNT
semzcnt의.

에러

실패 리턴에 대하여, errno 는 다음의 값들중 하나로 설정될 것이다.:
EACCES
호출 프로세스는 .IR cmd를 실행하는데 필요한 접근 권한을 갖고 있지 않는다.
EFAULT
arg.buf에의해가리키는주소나.IBarg.array는접근이불가능하다.
EIDRM
세마포어 설정은 삭제되었다.
EINVAL
cmd 또는 semid에대한부적절한값.
EPERM
인수 .I cmd has value IPC_SET 또는 IPC_RMID 값을 갖지만, 호출 프로세스 유효 사용자 ID는 명령을 실행시킬 수 있는 충분치 않은 특권들을 갖는다.
ERANGE
인수 cmdSETALL 또는 SETVAL를 갖고, and the value to which semval가 0보다 적고 구현 값보다 더 크게 설정되어야 하는 값을 갖는다. SEMVMX.

주의

IPC_INFO, SEM_STAT 그리고 SEM_INFO 제어 호출들은 할당된 자원들에 정보를 제공하는 .BR ipcs (8) 프로그램에 의해 사용된다.

세마포어 설정에 대한 다음의 시스템 제한은 .B semctl 호출에 영향을 미친다.

SEMVMX
Maximum value for semval에대한최대값은구현에의존적이다(32767).

호환

SVr4, SVID. SVr4는 에러 조건 EINVAL과 EOVERFLOW에 대한 문서를 작성한다.

관련 항목

ipc(5), shmget(2), shmat(2), shmdt(2)

역자

ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 29일 배성훈 <plodder@kldp.org>, 2000년 11월 18일