在应用层设置的一些计时器,往往在系统时间被修改之后就失效了,gettimeofday()就是这样一个让人又爱又恨的函数。如何在应用层获取一个不受系统时间影响的时间?linux2.6中提供了clock_gettime()函数,使用这个函数可以获得一个类似于jiffies的计数值,也可以获得当前的系统时间:
#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h>
int
main()
{
while(1)
{
struct timeval tm_gettimofdy;
time_t tm_time;
struct timespec tm_clock_real;
struct timespec tm_clock_mono;
time(&tm_time);
gettimeofday(&tm_gettimofdy, NULL);
clock_gettime(CLOCK_REALTIME, &tm_clock_real); //获取系统时间
clock_gettime(CLOCK_MONOTONIC, &tm_clock_mono); //获取开机后到现在的tick计时。
printf("time:%lu gettimeofday:%lu clock_real:%lu clock_mono:%lu\n",
tm_time, tm_gettimofdy.tv_sec, tm_clock_real.tv_sec, tm_clock_mono.tv_sec);
sleep(1);
}
return 0;
}