Linux驱动开发头文件剖析(二十四):<linux/ktime.h>、<linux/timekeeping.h>、<linux/timekeeping32.h>

ktime.h>直接说,这头文件就是搞内核纳秒级时间管理的,关键数据结构是ktime_t,就是那种s6 4 类型的,不跟着系统时钟变。

timekeeping.h>,这玩意儿是时间管理的大杂烩,系统时间、真实时间、启动时间啥的都在这。
比如timekeeping_init初始化时间管理,xtime_update更新系统时间,ktime_get_resolution_ns看系统时钟分辨率。

timekeeping3 2 .h>,这货过时了,内容都搬到了timekeeping.h里,就剩一个函数能看,以后要被删了,别用了。

总结一下,这三个头文件在内核里搞时间管理,各有各的活儿,用得挺多。

linux里面关于time,localtime等函数的一些问题

哎哟,你这问题问得,我帮你看看哈。

记得有年我在搞个Windows下的小程序,对时间操作那叫一个头大。
当时就是用time_t来存时间戳,用localtime来转本地时间。
你说的这个time_t time(time_t calptr),我这边没直接用过,感觉有点像C标准库里的time函数,那个是用来获取当前时间的。
它返回的是time_t类型的时间戳,如果出错就返回-1 你说的那个localtime,确实是要传个指针,不然编译器会提示你地址不能解引用。

你看啊,我当年用localtime的时候,就是直接传个变量地址,比如localtime(&now),这样就能拿到一个tm结构体,里面存了年月日时分秒这些信息。
记得有一次,我忘了检查localtime返回的指针是不是NULL,结果程序直接崩了,那叫一个惨。
所以啊,用指针的时候,一定要小心。

至于gmtime,那个是转UTC时间的,我也有用过。
比如你从服务器那边拿到一个UTC时间戳,用gmtime转一下,就能变成tm结构体,方便你处理时间。
记得有年我搞一个跨时区的网站,就是用gmtime和localtime来回转,搞得头都大了。

你说的这些函数,都是C标准库里的,用起来还是比较方便的。
不过啊,现在很多地方都用std::chrono了,那个是C++1 1 里的新东西,感觉用起来更现代,也更安全。
不过我这边没怎么用过,这块我没碰过,不敢乱讲。

总的来说,你说的这些函数,都是时间操作的基础,用好了,很多时间相关的问题都能解决。
不过啊,用指针的时候,一定要小心,不然很容易出问题。
我记得有年我因为一个指针问题,调试了整整一天,最后才找到问题所在,那叫一个郁闷。

如果你还有其他问题,随时问我哈。

linux获取本地时间在终端打印

直接用C语言获取本地时间:
c include include