Linux内核API current_kernel_time

current_kernel_time函数功能描述:用于获得当前系统内核的时间,该时间是距离1970年1月1日0时0分0秒的时间,是用秒和纳秒表示的。

current_kernel_time文件包含

#include<linux/time.h>

current_kernel_time函数定义

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

函数定义格式:

struct timespec current_kernel_time(void)

current_kernel_time输入参数说明

  • 该函数不需要任何参数。

current_kernel_time返回参数说明

  • 函数返回值类型是一个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。
  • 返回值的字段tv_sec的值表示当前系统距离1970-1-1 00:00:00的秒数,字段tv_nsec的值表示不足一秒的时间,用纳秒表示。

current_kernel_time实例解析

编写测试文件:current_kernel_time.c

头文件引用:

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

模块加载函数定义:

int __init current_kernel_time_init(void)
{
    printk("current_kernel_time test begin.\n");
    struct timespec now=current_kernel_time( ); //调用函数获得当前系统内核时间
    printk("the seconds of the current kernel time is: %ld\n", now.tv_sec);
                                                  // 显示当前系统内核的秒数
    // 显示当前系统内核的纳秒数
    printk("the nanoseconds of the current kernel time is:%ld\n", now.tv_nsec);
    printk("current_kernel_time test over.\n");
    return 0;
}

模块退出函数定义:

void __exit current_kernel_time_exit(void)
{
    printk("Goodbye current_kernel_time test\n");
}

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

module_init(current_kernel_time_init);
module_exit(current_kernel_time_exit);

实例运行结果及分析:

执行命令insmod current_kernel_time.ko插入模块,输入命令dmesg -c查看内核输出信息,出现如图所示结果。

Linux内核API current_kernel_time

结果分析:

从结果可以看出当前系统内核的时间,将秒数粗略的换算成年月日可以说明函数能正确的计算当前时间与1970:1:1:00:00:00的时间差。

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

评论 抢沙发

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