GETITIMER(2)

이름
getitimer, setitimer - interval timer의 값을 얻거나 설정한다.

사용법
#include <sys/time.h>

int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

설명
시스템은 3개의 interval timer를 가진 각 프로세스를 제공한다. 모든 타이머가 작동을 멈추면, 프로세스가 시그널을 보내고 타이머는 다시 작동을 시작한다.

ITIMER_REAL
    실시간의 감소율과 SIGALRM 의 만료기간을 넘겨준다.

ITIMER_VIRTUAL
    프로세스가 실행되고 있을때 감소율과 SIGVTALRM 의 만료기간을 넘겨준다.

ITIMER_PROF
    프로세스가 진행되고 있거나, 시스템이 프로세스를 대신해 실행할때 감소율. ITIMER_VIRTUAL, 를 결부시켜 생각하면, 이 타이머는 대개 사용자와 커널공간에 응용프로그램에 의해 보내진 프로파일 시간에 쓰인다. SIGPROF 는 만료기간을 넘겨준다.

타이머 값은 다음 구조에의해 정의된다:
    struct itimerval {
        struct timeval it_interval; /* next value */
        struct timeval it_value;    /* current value */
    };
    struct timeval {
        long tv_sec;                /* seconds */
        long tv_usec;               /* microseconds */
    };

Getitimer(2) 는 ITIMER_REAL, ITIMER_VIRTUAL, 나 ITIMER_PROF 중 하나에 의해 지정된 타이머를 위해 현재 설정한 value 에 의해 지정된 구조로 채워진다. it_value 는 타이머에 남겨진 시간의 양으로 설정되거나 타이머가 작동하지 않으면 0이다. 비슷하게, it_interval 는 reset 값으로 설정된다. Setitimer(2) 는 value 값으로 지정된 타이머를 설정한다. ovalue 가 0이 아니면, 타이머의 이전 값은 그곳에 저장된다.

시그널을 생성하는 it_value 에서 0까지 타이머 감소와 it_interval 로 재설정한다. 0으로 설정된 타이머는 멈춘다. (it_value 는 0이거나 타이머가 만표되었고 it_interval 는 0이다 )

Both tv_sec 와 tv_usec 는 모두 타이머의 지속기간 결정에 중요하다.

타이머는 시간이 요청되기 전엔 절대 만료되지 않을것이다. 그 대신 몇몇 짧은 만료기간은 시스템 타이머 해석(현재 10ms)에 의지한다. 만료기간에 시그널은 생성될 것이고, 타이머는 새설정된다. 타이머가 프로세스가 실행중인 동안 만료된다 면 시그널이 생성될때 즉시 전달될 것이다. 그렇지 않으면 시스템 로딩에 의지하는 짧은 시간에의해 상쇄될 것이다.

반환값
성공시, 0이 반환된다. 실패시, -1이 반환되고, errno 는 적절히 설정된다.

에러

EFAULT
    value 나 ovalue 가 유효한 포인터가 아니다.

EINVAL
    ITIMER_REAL, ITIMER_VIRT, or ITIMER_PROF. 중의 어떤것도 아니다.

호환
SVr4, 4.4BSD (이것은 4.2BSD에서 처음 보였다).

관련 항목
gettimeofday(2), sigaction(2), signal(2).

버그
리눅스에서, 시그널의 생성과 전달은 별개이고, 각 시그널은 중요한 이벤트에 허용된다. ITIMER_REAL 가 이전 만료기간으로 부터 시그널이 전달되기 전에 만료될 것이다. 이벤트같은 초 시그널은 잃게 될것이다.

역자
ASPLINUX<man@asp-linux.co.kr>, 2000년 7월 29일