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查看内核输出信息,出现如图所示结果。
结果分析:
从结果可以看出当前系统内核的时间,将秒数粗略的换算成年月日可以说明函数能正确的计算当前时间与1970:1:1:00:00:00的时间差。