Linux内核 timespec_compare()

函数:timespec_compare()

函数 timespec_compare() 比较两个timespec类型的变量所表示的时间的大小。

文件包含:

#include<linux/time.h>

函数定义:

在内核源码中的位置: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;
}

输入参数说明:

  • 此函数的参数是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()返回值是int型,可能的取值是-1、0、1。返回-1,说明函数的第一个参数表示的时间小于第二个参数表示的时间,返回0说明函数的两个参数表示的时间相同,返回1说明函数的第一个参数表示的时间大于第二个参数表示的时间。

实例解析:

编写测试文件: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所示结果。

Linux内核 timespec_compare()

改变两个时间的大小,可能会出现如图B和图C所示的结果。

Linux内核 timespec_compare()

Linux内核 timespec_compare()

结果分析:

A中所示函数timespec_compare()的返回值是1,说明第一个参数表示的时间大于第二个参数表示的时间,实际参数也是如此。对于图B和图C分别是为了说明函数timespec_compare()对于输入参数之间的不同关系返回的值是不同的,并且有除图A之外的两个可能的返回结果。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!