timeval_compare()函数用于比较两个timeval变量表示的时间的大小。
timeval_compare文件包含
#include<linux/time.h>
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 <linux/module.h>
#include<linux/time.h>
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
所示结果。
还有其他两种可能的结果,如图B
和图C
所示。
1)两个参数表示的时间相同。如图B
所示。
2)第一个参数表示的时间大于第二个参数表示时间。如图C
所示。
结果分析:
从图A
可以推断函数的第一个参数表示的时间小于第二个参数表示的时间,查看程序验证推断正确。对于图B
和图C
是此函数调用另外两种可能的运行结果,只需改变参数的大小即可实现。