Linux 定时器 setitimer

阅读了《Unix/Linux系统编程》中关于定时器及时钟服务的部分,结合网上资料进行了整理

1. 相关概念

基于X86架构的个人计算机有数个定时器,包括实时时钟RTC、可编程间隔定时器PIT、多核CPU中的本地定时器、高分辨率定时器。

实时时钟RTCRTC由一个小型备用电池供电,即使计算机关机时,它也能够连续运行。RTC用于实时提供时间和日期信息。由于RTC在电脑关机时继续运行,因此可以解释为什么开机后系统显示的时间与现实中保持一致。时间变量是一个长整数,即从1970年1月1日起经过的秒数

2. 时钟相关系统调用与库函数

2.1 gettimeofday系统调用

返回当前时间即当前秒数和微秒数。其中秒数是相对于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即可。

2.2 settimeofday系统调用

设置系统时间

int settimeofday(const struct timeval *tv, const struct timezone *tz)
  • 第一个参数tv即为要设置的系统时间
  • 第二个参数类型timezone已过期,使用NULL即可

2.3 ctime库函数

以日历形式显示当前日期和时间。

char * ctime(const time_t * timer)
  • 参数是指向 time_t 变量的指针,该变量即为从1970年开始的秒数。
  • 返回值是一个C字符串,该字符串以日历形式表示当前日期和时间。

示例:获取当前时间并以日历形式显示

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
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 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值