NAME

adjtime - 시스템 클럭 동기화를 위해 시간 정정하기

SYNOPSIS

#include <sys/time.h>

int adjtime(const struct timeval *delta, struct timeval *olddelta);

glibc 기능 확인 매크로 요건 (feature_test_macros(7) 참고):

adjtime():
glibc 2.19부터:
_DEFAULT_SOURCE
glibc 2.19 및 이전:
_BSD_SOURCE

DESCRIPTION

adjtime() 함수는 (gettimeofday(2)가 반환하는) 시스템 클럭을 서서히 조정한다. 클럭 시간을 얼마나 조정할지를 delta가 가리키는 구조체로 지정한다. 그 구조체는 다음 형태다.

struct timeval {
    time_t      tv_sec;     /* 초 */
    suseconds_t tv_usec;    /* 마이크로초 */
};

delta의 조정치가 양수면 조정이 완료될 때까지 시스템 클럭 속도를 어떤 작은 비율만큼 올린다. (즉 매초마다 클럭 값에 작은 양의 시간을 더한다.) delta의 조정치가 음수면 비슷한 방식으로 클럭 속도를 내린다.

앞선 adjtime() 호출의 클럭 조정이 이미 진행 중인 상태에서 adjtime() 호출이 이뤄지면서 뒤쪽 호출의 delta가 NULL이 아니면 앞선 조정이 중단된다. 하지만 이미 완료된 부분을 되돌리지는 않는다.

olddelta가 NULL이 아니면 가리키는 버퍼를 이용해 앞선 조정에서 아직 완료되지 않고 남은 시간 양을 반환한다.

RETURN VALUE

성공 시 adjtime()은 0을 반환한다. 실패 시 -1을 반환하며 오류를 나타내도록 errno를 설정한다.

ERRORS

EINVAL
delta의 조정치가 허용 범위 밖이다.
EPERM
호출자에게 시간을 조정할 만한 특권이 없다. 리눅스에서는 CAP_SYS_TIME 역능이 필요하다.

ATTRIBUTES

이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.

인터페이스 속성
adjtime() 스레드 안전성 MT-Safe

CONFORMING TO

4.3BSD, 시스템 V.

NOTES

adjtime()을 통해 클럭에 하는 조정은 클럭이 항상 단조 증가하게 하는 방식으로 이뤄진다. adjtime()을 써서 조정을 하면 시스템 시간이 앞이나 뒤로 갑자기 건너뛰면서 특정 응용들(가령 make(1))에 발생할 수 있는 문제들이 방지된다.

adjtime()은 시스템 시간을 조금 조정하는 데 쓰는 것이다. 대부분의 시스템에서는 delta에 지정할 수 있는 조정치에 제한을 둔다. glibc 구현에서는 delta가 (INT_MAX / 1000000 - 2) 이하이고 (INT_MIN / 1000000 + 2) 이상이어야 한다. (i386에서 각각 2145초와 -2145초다.)

BUGS

오래된 버그로 인해 delta를 NULL로 지정한 경우에 남아 있는 클럭 조정치에 대한 유효한 정보를 olddelta로 반환하지 않았다. (이 경우에 원래 adjtime()은 남아 있는 클럭 조정치를 변경 없이 반환해야 한다.) glibc 2.8 및 이후 버전과 리눅스 커널 2.6.26 및 이후 버전을 쓰는 시스템에서는 이 버그가 수정돼 있다.

SEE ALSO

adjtimex(2), gettimeofday(2), time(7)


2021-03-22