函数 timespec_compare() 比较两个timespec类型的变量所表示的时间的大小。
timespec_compare文件包含
#include<linux/time.h>
timespec_compare函数定义
在内核源码中的位置:linux-3.19.3/include/linux/time.h
函数定义格式:
static inline int timespec_compare(const struct timespec *lhs, const struct timespec *rhs)
{
if (lhs->tv_sec < rhs->tv_sec)
return -1;
if (lhs->tv_sec > rhs->tv_sec)
return 1;
return lhs->tv_nsec - rhs->tv_nsec;
}
timespec_compare输入参数说明
- 此函数的参数是struct timespec类型的结构体变量,定义见文件linux-3.19.3/include/uapi/linux/time.h,其定义如下:
struct timespec {
__kernel_time_t tv_sec; /* 秒数 */
long tv_nsec; /* 纳秒数*/
};
- 该结构体是表示时间的一种方法,字段tv_sec表示的是秒数,字段tv_nsec表示不足一秒部分的时间,用纳秒表示,在此其取值范围是0~999999999。
timespec_compare返回参数说明
- 函数timespec_compare()返回值是int型,可能的取值是-1、0、1。返回-1,说明函数的第一个参数表示的时间小于第二个参数表示的时间,返回0说明函数的两个参数表示的时间相同,返回1说明函数的第一个参数表示的时间大于第二个参数表示的时间。
timespec_compare实例解析
编写测试文件:timespec_compare.c
头文件引用:
#include <linux/module.h>
#include<linux/time.h>
MODULE_LICENSE("GPL");
模块加载函数定义:
int __init timespec_compare_init(void)
{
int result_equ, result_com; //用于保存函数timespec_compare( )的返回结果
/*定义两个timespec类型的变量,作为函数的参数*/
struct timespec lhs=
{
.tv_sec=10,
.tv_nsec=110
};
struct timespec rhs=
{
.tv_sec=9,
.tv_nsec=100
};
printk("timespec_compare begin.\n");
result_com=timespec_compare(&lhs, &rhs); //比较时间的大小
printk("the timespec compare result is: %d\n", result_com); //显示时间比较大小的结果
printk("timespec_compare over\n");
return 0;
}
模块退出函数定义:
void __exit timespec_compare_exit(void)
{
printk("Goodbye timespec_compare\n");
}
模块加载、退出函数调用:
module_init(timespec_compare_init);
module_exit(timespec_compare_exit);
实例运行结果及分析:
执行命令insmod timespec_compare.ko插入模块,然后输入命令dmesg -c,出现如图A
所示结果。
改变两个时间的大小,可能会出现如图B
和图C
所示的结果。
结果分析:
图A
中所示函数timespec_compare()的返回值是1,说明第一个参数表示的时间大于第二个参数表示的时间,实际参数也是如此。对于图B
和图C
分别是为了说明函数timespec_compare()对于输入参数之间的不同关系返回的值是不同的,并且有除图A
之外的两个可能的返回结果。