clock_gettime의 선언부이다.

int clock_gettime(clockid_t __clock_id, struct timespec *__tp);

clockid_t는 아래와 같이 정의되어 있는데 이 id로 어떤 시간을 갖고 올지 정할 수 있다.

typedef enum {
_CLOCK_REALTIME __CLOCK_AVAILABILITY = 0,
#define CLOCK_REALTIME _CLOCK_REALTIME
_CLOCK_MONOTONIC __CLOCK_AVAILABILITY = 6,
#define CLOCK_MONOTONIC _CLOCK_MONOTONIC
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
_CLOCK_MONOTONIC_RAW __CLOCK_AVAILABILITY = 4,
#define CLOCK_MONOTONIC_RAW _CLOCK_MONOTONIC_RAW
_CLOCK_MONOTONIC_RAW_APPROX __CLOCK_AVAILABILITY = 5,
#define CLOCK_MONOTONIC_RAW_APPROX _CLOCK_MONOTONIC_RAW_APPROX
_CLOCK_UPTIME_RAW __CLOCK_AVAILABILITY = 8,
#define CLOCK_UPTIME_RAW _CLOCK_UPTIME_RAW
_CLOCK_UPTIME_RAW_APPROX __CLOCK_AVAILABILITY = 9,
#define CLOCK_UPTIME_RAW_APPROX _CLOCK_UPTIME_RAW_APPROX
#endif
_CLOCK_PROCESS_CPUTIME_ID __CLOCK_AVAILABILITY = 12,
#define CLOCK_PROCESS_CPUTIME_ID _CLOCK_PROCESS_CPUTIME_ID
_CLOCK_THREAD_CPUTIME_ID __CLOCK_AVAILABILITY = 16
#define CLOCK_THREAD_CPUTIME_ID _CLOCK_THREAD_CPUTIME_ID
} clockid_t;

timespec은 아래와 같이 정의되어 있다. tv_sec은 초(seconds)를 나타낸다. tv_nsec(nano seconds)은 나노초를 나타낸다. 여기다가 시간을 저장한다.

#define _STRUCT_TIMESPEC        struct timespec

#include <machine/types.h>/* __darwin_time_t */

_STRUCT_TIMESPEC
{
	__darwin_time_t tv_sec;
	long            tv_nsec;
};

clockid_t에 대해 구체적으로 알아보자.

CLOCK_REALTIME시스템 전역의 실제 시간CLOCK_REALTIME_COARSE시스템 전역의 실제 시간. 위의 것보다 실행시간이 빠르나 정확도는 떨어짐.CLOCK_MONOTONIC시스템 관리자는 이 값을 초기화 할 수 있다.단조 시계로 특정시간부터 흐른 시간을 측정. (일반적으로 부팅이후 시간)CLOCK_MONOTONIC_COARSE같은 단조 시계인데 빠름. 대신 정확도가 떨어짐.CLOCK_MONOTONIC_RAW위와 비슷하지만 NTP 조정이나 adjtime(3)에 대한 조정에 영향을 받지 않는 하드웨어 기반시간에 대한 접근을 제공. 시스템이 절전 대기 시간은 포함하지 않음.CLOCK_BOOTTIME위와 비슷하지만 시스템의 절전 대기 시간도 포함하는 시간.CLOCK_PROCESS_CPUTIME_ID프로세스별 cpu 시간 클럭. 프로세스내 모든 쓰레드들이 소모한 CPU 시간을 나타냄.CLOCK_THREAD_CPUTIME_ID특정 쓰레드 한정 CPU 시간 클럭