UNIX에서의 시간
12 Sep 2017 | C++ UNIX LinuxUNIX 시간
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에 더 안전합니다.