Linux内核API timespec_to_ns

函数timespec_to_ns()用于将结构体timespec变量表示的时间转换成纳秒。

timespec_to_ns文件包含

#include<linux/time.h>

timespec_to_ns函数定义

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

函数定义格式:

static inline s64 timespec_to_ns(const struct timespec *ts)
{
    return ((s64) ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec;
}

timespec_to_ns输入参数说明

  • 函数的输入参数是timespec类型的结构体变量,定义见文件linux-3.19.3/include/uapi/linux/time.h,其定义如下:
struct timespec {
    __kernel_time_t         tv_sec;       /*秒数 */
    long                    tv_nsec;      /* 纳秒数*/
};
  • 此结构体是用于记录时间的,其中字段tv_sec的单位是秒(s),用于表示整秒数,字段tv_nsec的单位是纳秒(ns),表示不足一秒的部分,在此其有效取值范围是0~999999999。

timespec_to_ns返回参数说明

  • 此函数的返回值都是64位的有符号整数,表示的是时间,单位是纳秒(ns)。

timespec_to_ns实例解析

编写测试文件:timespec_to_ns.c

头文件引用:

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

模块加载函数定义:

int __init timespec_to_ns_init(void)
{
    printk("timespec_to_ns begin.\n");
    struct timespec ts={
        .tv_sec=1,
        .tv_nsec=1
    };      //定义变量,用作函数参数
    s64 ns=timespec_to_ns(&ts);     //调用函数将timespec类型的变量表示的时间转换成纳秒
    printk("the tv_sec of the timespec is:%ld\n", ts.tv_sec);    //显示变量的秒数
    printk("the tv_nsec of the timespec is:%ld\n", ts.tv_nsec); //显示变量的纳秒数
    printk("the result of the timespec_to_ns is:%lld\n", ns);    //显示转换结果,纳秒
    printk("timespec_to_ns over.\n");
    return 0;
}

模块退出函数定义:

void __exit timespec_to_ns_exit(void)
{
    printk("Goodbye timespec_to_ns.\n");
}

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

module_init(timespec_to_ns_init);
module_exit(timespec_to_ns_exit);

实例运行结果及分析:

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

Linux内核API timespec_to_ns

结果分析:

从图中可以看出此函数能将结构体变量表示的时间成功的转换成纳秒。

赞(0)
未经允许不得转载:极客笔记 » Linux内核API timespec_to_ns
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址