Linux 内核中的 64 位 time_t

use*_*502 2 linux 64-bit kernel time-t year2038

我已经编译了内核 3.19.1 但仍然有问题time_t。只是一个简单的程序,cout << sizeof (time_t);给出的大小为 4 个字节,而不是我的意图的 8 个字节。

我应该在 make menuconfig 期间打开特定选项吗?

phu*_*clv 6

32 位 Linux 上的 64 位时间支持首次在5.1 内核中引入,因此如果您的年龄比该版本大,抱歉。由于更改旧系统调用的返回类型会破坏旧应用程序,因此必须添加新的*time64系统调用。检查此表,您会发现这些系统调用仅在 32 位平台上可用。

现在,如果您正在为 32 位系统编写代码,您可以clock_gettime64直接调用(从内联汇编或带有syscall()函数的 C)来获取当前时间。但在那之后你就完全靠自己了。要获得完整的用户空间支持,您必须使用Linux 5.6 或更高版本以及 musl 1.2+ 或 glibc 2.32+。只需重建你的代码,time_t就会变成 64 位长

  • 所有用户空间都必须使用 64 位进行编译time_t,即将推出的 musl-1.2 和 glibc-2.32 版本以及 linux-5.6 或更高版本中安装的内核头文件将支持该版本。

  • 直接使用系统调用接口的应用程序需要移植为使用time64linux-5.1中添加的系统调用来代替现有的系统调用。这会影响大多数用户futex()以及seccomp()拥有自己的运行时环境(不基于 libc)的编程语言。

https://lkml.org/lkml/2020/1/29/355?anz=web

欲了解更多信息,请阅读