Linux内核API timeval_to_ns

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

timeval_to_ns文件包含

#include<linux/time.h>

timeval_to_ns函数定义

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

函数定义格式:

static inline s64 timeval_to_ns(const struct timeval *tv)
{
    return ((s64) tv->tv_sec * NSEC_PER_SEC) +tv->tv_usec * NSEC_PER_USEC;
}

timeval_to_ns输入参数说明

函数的输入参数是timeval类型的结构体变量,定义见文件linux-3.19.3/include/uapi/linux/time.h,其声明如下:

struct timeval {
    __kernel_time_t                tv_sec;         /*秒数*/
    __kernel_suseconds_t          tv_usec;        /*微秒数*/
};

此结构体可用于记录时间,但不如timespec结构体精准,其中字段tv_sec的单位是秒(s),用于表示整秒数,与结构体timespec的tv_sec字段相同,字段tv_usec的单位是微秒(ms),表示不足一秒的部分,其取值范围是0~999999。

timeval_to_ns返回参数说明

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

timeval_to_ns实例解析

编写测试文件:timeval_to_ns.c

头文件引用:

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

模块加载函数定义:

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

模块退出函数定义:

void __exit timeval_to_ns_exit(void)
{
    printk("Goodbye timeval_to_ns\n");
}

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

module_init(timeval_to_ns_init);
module_exit(timeval_to_ns_exit);

实例运行结果及分析:

执行命令insmod timeval_to_ns.ko插入模块,然后输入命令dmesg -c,出现如图所示结果。

Linux内核API timeval_to_ns

结果分析:

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程