在上一篇文章《struct timeval 和 struct timespec 应用小结》我们分析了与linux系统时间相关的结构体定义,在linux系统C编程中,获取系统时间的api函数有两个,分别为:
int gettimeofday(struct timeval *tv, struct timezone *tz)
int clock_gettime(clockid_t, struct timespec *)
我们逐个分析:
1、gettimeofday()
该函数把当前时间用 tv 结构体返回,当前时区的信息则放到tz所 指向的结构体。
我们在使用该函数时,第2个参数一般为空(NULL),因为 一般只需要获取当前时间, 而不用获取时区信息。
注意:返回的当前时间tv.tv_sec 是从1970年1月1日0 点开始的 “秒”数。
2、clock_gettime()
该函数是用于获取特定 时钟的时间,常用如下4种时钟:
CLOCK_REALTIME //系统当前时间,从1970年1.1日算起
CLOCK_MONOTONIC //系统的启动后运行时间,不能被设置
CLOCK_PROCESS_CPUTIME_ID //本进程运行时间
CLOCK_THREAD_CPUTIME_ID //本线程运行时间
我们经常用到的是CLOCK_REALTIME和CLOCK_MONOTONIC,其中CLOCK_REALTIME 跟 gettimeofday 返回的秒是一致的,都是相对于1970年1月1日的秒数。
区别:
1、clock_gettime 相比 gettimeofday的精度更高一些,前者精度到 纳秒,而后者精度到微秒。
2、clock_gettime可以通过 时钟选项而 得到不同参考下的时间,而gettimeofday则只有一种用途(获取当前系统时间)。
常规应用下,使用gettimeofday 即可获取 当前系统时间,对精度要求高,而且有不同需求的,可以使用clock_gettime。