阅读了《Unix/Linux系统编程》中关于定时器及时钟服务的部分,结合网上资料进行了整理
基于X86架构的个人计算机有数个定时器,包括实时时钟RTC、可编程间隔定时器PIT、多核CPU中的本地定时器、高分辨率定时器。
实时时钟RTC
:RTC由一个小型备用电池供电,即使计算机关机时,它也能够连续运行。RTC用于实时提供时间和日期信息。由于RTC在电脑关机时继续运行,因此可以解释为什么开机后系统显示的时间与现实中保持一致。时间变量是一个长整数,即从1970年1月1日起经过的秒数。
返回当前时间即当前秒数和微秒数。其中秒数是相对于1970年1月1日0点所经过的秒数。
int gettimeofday(struct timeval * tv, struct timezone * tz)
参数tv指向一个timeval结构体变量,该变量保存返回的时间结果。
timeval结构体定义如下:tv_sec成员保存秒数,tv_usec成员保存微秒数
struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};
第二个参数类型timezone已过期,使用NULL即可。
设置系统时间
int settimeofday(const struct timeval *tv, const struct timezone *tz)
以日历形式显示当前日期和时间。
char * ctime(const time_t * timer)
示例:获取当前时间并以日历形式显示
#include
#include
#include
#include
int main(){
struct timeval t;
gettimeofday(&t,NULL);//获取当前系统时间
printf("cur time is : %s",ctime(&t.tv_sec));//以日历形式打印当前时间
}
运行结果
xtark@xtark-vmpc:~/桌面/linux_study/section5$ gcc test.c
xtark@xtark-vmpc:~/桌面/linux_study/section5$ ./a.out
cur