linux timeval,定时机制 – Linux内核API timeval_compare

timeval_compare()函数用于比较两个timeval变量表示的时间的大小。

timeval_compare文件包含

#include

timeval_compare函数定义

在内核源码中的位置:linux-3.19.3/include/linux/time.h

函数定义格式:

static inline int timeval_compare(const struct timeval *lhs, const struct timeval *rhs)

{

if (lhs->tv_sec < rhs->tv_sec)

return -1;

if (lhs->tv_sec > rhs->tv_sec)

return 1;

return lhs->tv_usec - rhs->tv_usec;

}

timeval_compare输入参数说明

函数的两个输入参数都是timeval类型的结构体变量,定义见文件linux-3.19.3/include/uapi/linux/time.h,其声明如下:

struct timeval

{

__kernel_time_t tv_sec; /* 秒数 */

__kernel_suseconds_t tv_usec; /* 微秒数 */

};

此结构体可用于记录时间,其中字段tv_sec的单位是秒(s),用于表示整秒数,字段tv_usec的单位是微秒(ms),表示不足一秒的部分,在此其有效取值范围是0~999999。

timeval_compare返回参数说明

此函数的返回结果是int型的变量,可能的值是大于0、小于0、等于1,返回结果小于0说明第一个参数表示的时间小于第二个参数表示的时间;返回结果等于0说明两个参数表示的时间相同;返回大于0说明第一个参数表示的时间大于第二个参数表示的时间。

timeval_compare实例解析

编写测试文件:timeval_compare.c

头文件引用:

#include

#include

MODULE_LICENSE("GPL");

模块加载函数定义:

int __init timeval_compare_init(void)

{

// 定义变量,当作函数的第一个参数

struct timeval lhs=

{

.tv_sec=1,

.tv_usec=1000

};

// 定义变量,当作函数的第二个参数

struct timeval rhs=

{

.tv_sec=1,

.tv_usec=9999

};

printk("timeval_compare begin.\n");

int result=timeval_compare(&lhs, &rhs); //调用函数,比较两个时间的大小

printk("the timeval compare result is: %d\n", result); //显示比较结果

printk("timeval_compare over.\n");

return 0;

}

模块退出函数定义:

void __exit timeval_compare_exit(void)

{

printk("Goodbye timeval_compare\n");

}

模块加载、退出函数调用:

module_init(timer_init);

module_exit(timer_exit);

实例运行结果及分析:

执行命令insmod timeval_compare.ko插入模块,然后输入命令dmesg -c,出现如图A所示结果。

883976f970e45612e1c7bc3c068c2fe4.png

还有其他两种可能的结果,如图B和图C所示。

68c49b6b361125c12166781ce74daab0.png

e87d396490dd277e1e11e68dcff75b33.png

1)两个参数表示的时间相同。如图B所示。

2)第一个参数表示的时间大于第二个参数表示时间。如图C所示。

结果分析:

从图A可以推断函数的第一个参数表示的时间小于第二个参数表示的时间,查看程序验证推断正确。对于图B和图C是此函数调用另外两种可能的运行结果,只需改变参数的大小即可实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值