定时器及时钟服务
硬件定时器
定时器:时钟源和可编程计数器组成的硬件设备。
时钟源:通常是一个晶体振荡器,产生周期性电信号。
使用倒计时值对计数器进行编程,每个时钟信号减1,当计数减为0时,计数器向CPU生成一个定时器中断,重复倒计时。
个人计算器定时器
- 实时时钟
- 可编程间隔定时器
- 多核CPU中的本地定时器
- 高分辨率定时器
CPU操作和中断处理
程序计数器(PC)获指令指针(IP)
标志或状态寄存器(SR)
堆栈指针(SP)
通用寄存器
中断是I/O设备或协处理器发送给CPU的外部信号,请求CPU服务。
时钟服务函数
gettimeofday-settimeofday
对linux内核的系统调用
struct timeval{
time_t tv_sec;
suseconds_t tv_usec;
}
实例:通过gettimeofday()获取系统时间
编译后报错
缺少头文件#include <time.h>
以及将格式字符串中的%d改为%ld
修改后仍报错
查询后发现第二个printf函数传递了一个字符串字面量,这是安全漏洞的一种常见来源。如果字符串由用户输入,则可能会被用于执行任意代码。因此系统报错
用以下函数代替
time_t curtime;
time(&curtime);
printf("%s", ctime(&curtime));
return(0);
编译通过