Linux内核 set_normalized_timespec()

函数:set_normalized_timespec( )

函数实现将以sec表示的秒数和以nsec表示的纳秒数的时间转换成以结构体timespec变量表示的时间。

文件包含:

#include<linux/time.h>

函数声明:

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

函数定义格式:

void set_normalized_timespec(struct timespec *ts, time_t sec, s64 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。

  • 函数的第二个参数是time_t类型的,与__kernel_time_t相同,是内核定义的一种类型,其大小范围和long相同,表示要转换时间的秒数。

  • 函数的第三个参数表示要转换时间的纳秒数,其可能的取值是任意的s64型的变量,s64为64位有符号数。

返回参数说明:

  • 函数不返回任何类型的数值。

实例解析:

编写测试文件:set_normalized_timespec.c

头文件引用:

#include <linux/module.h>
#include<linux/time.h>
MODULE_LICENSE("GPL");

模块加载函数定义:

int set_normalized_timespec_init(void)
{
    // 定义变量,作为函数的第一个参数
    struct timespec ts=
    {
        .tv_sec=0,
        .tv_nsec=0
    };
    printk("set_normalized_timespec begin.\n");
    printk("the value of struct timespec before the set_normalized_timespec:\n");
    printk("the tv_sec value is:%ld\n", ts.tv_sec); //显示函数调用之前结构体变量表示的时间值
    printk("the tv_nsec value is:%ld\n", ts.tv_nsec);
    set_normalized_timespec(&ts,1,1000000010L); // 调用函数,更改结构体变量表示的时间值
    printk("the value of struct timespec after the set_normalized_timespec:\n");
    printk("the tv_sec value is:%ld\n", ts.tv_sec); //显示函数调用之后结构体变量表示的时间值
    printk("the tv_nsec value is:%ld\n", ts.tv_nsec);
    printk("set_normalized_timespec over.\n");
    return 0;
}

模块退出函数定义:

void set_normalized_timespec_exit(void)
{
    printk("Goodbye set_normalized_timespec\n");
}

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

module_init(set_normalized_timespec _init);
module_exit(set_normalized_timespec _exit);

实例运行结果及分析:

执行命令insmod set_normalized_timespec.ko插入模块,然后输入命令dmesg -c查看系统输出信息,出现如图所示结果。

Linux内核 set_normalized_timespec()

结果分析:

从图可以看出函数能将后两个参数表示的时间转换成标准的时间,即用结构体timespec变量表示的时间。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!