UNIX에서의 시간

|

UNIX 시간

UNIX 시간은 UTC 1970년 1월 1일 00:00:00 이후부터 현재까지 흐른 시간을 초(seconds)로 환산한 값입니다. 지역 시간 기반이 아닌 영국의 그리니치 천문대를 기준으로 한 UTC 시간입니다.


UNIX 시간 가져오기

시스템의 시간을 가져오기 위해서는 time() 함수를 이용합니다. 현재 날짜와 시간을 정수로 리턴합니다. time() 함수를 사용하기 위해서는 time.h 파일을 include 해야 합니다.

time_t time(time_t *timep);

time() 함수 외에도 BSD(Berkeley Software Distribution) UNIX에서 제공하는 시간 관련 함수들이 있습니다. gettimeofday() 함수를 이용해서 시간을 가져올 수 있습니다. (settimeofday() 함수를 이용해 시간을 설정할 수도 있습니다.) gettimeofday() 함수를 사용하기 위해서는 sys/time.h 파일을 include 해야 합니다.

int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv, const struct timezone *tz);


timeval 구조체

timeval 구조체는 다음과 같은 구조로 되어 있습니다.

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

POSIX에서는 gettimeofday() 함수와 비슷한 역할을 하는 clock_gettime() 함수를 제공합니다.

int clock_getres(clockid_t clk_id, struct timespec *res);
int clock_gettime(clockid_t clk_id, struct timespec *tp);
int clock_settime(clockid_t clk_id, const struct timespec *tp);

첫 번째 인자인 clockid_t는 시계의 종류를 의미합니다. POSIX 표준에서는 CLOCK_REALTIME(시스템 전역의 시간), CLOCK_MONOTONIC(부팅 시간 등의 소요 시간)의 두 가지를 제공합니다. 비표준으로 CLOCK_MONOTONIC_RAW, CLOCK_PROCESS_CPUTIME_ID(프로세스 단위의 CPU 사용 시간), CLOCK_THREAD_CPUTIME_ID(Thread 단위의 CPU 사용 시간) 등의 값을 사용할 수도 있습니다.

clock_gettime() 함수는 time() 함수나 gettimeofday() 함수에 비해 Thread에 더 안전합니다.