有什么办法可以在Linux的32位程序中获得64位的time_t

有什么办法可以在Linux的32位程序中获得64位的time_t,第1张

概述有什么办法可以在Linux的32位程序中获得64位的time_t

在windows上,我可以打电话给:

_time32(__time32_t); // to get 32bit time_t _time64(__time64_t); // to get 64bit time_t

(在32位和64位程序中)

有没有办法在linux(这与GCC编译)这样做?

为什么在linux下input命令的时候,input的命令与我在脚本中input的命令不一样?

寻找基准testing代码片段(c ++)

计算windowsbatch file中的时差

如何找出linux内核是否会在月底插入闰秒

每隔N秒钟与windows系统时钟同步一次

将string转换为date:未findstrptime标识符

使用CLOCK_MONOTONIC的AndroID(linux)正常运行时间

/ usr / bin / time如何测量内存使用情况?

如何在给定的时间间隔运行Unix命令?

在AWK中将unix时间戳转换为hh:mm:ss:SSS(其中SSS为毫秒)

显然,不,这是不可能的。 对于初学者来说,linux中只有一个time()函数,没有time32()或time64() 。

经过一段时间的搜索,我可以看到这不是libc的错,但罪魁祸首其实是内核。

为了让libc获取当前时间,它需要为它执行一个系统调用: ( Source )

time_t time (t) time_t *t; { // ... INTERNAL_SYSCALL_DECL (err); time_t res = INTERNAL_SYSCALL (time,err,1,NulL); // ... return res; }

系统调用定义为: ( Source )

SYSCALL_define1(time,time_t __user *,tloc) { time_t i = get_seconds(); // ... return i; }

函数get_seconds()返回一个unsigned long ,如下所示: ( Source )

unsigned long get_seconds(voID) { struct timekeeper *tk = &timekeeper; return tk->xtime_sec; }

timekeeper.xtime_sec实际上是64位: ( Source )

struct timekeeper { // ... /* Current CLOCK_REALTIME time in seconds */ u64 xtime_sec; // ... }

现在,如果你知道你的C,你知道unsigned long的大小实际上是依赖于实现的。 在我的64位机器上,这是64位; 但在我的32位机器,这是32位。 在一些32位的实现上它可能是64位,但是不能保证。

另一方面, u64始终是64位的,所以在u64情况下,内核以64位类型跟踪时间。 为什么接下来将这个作为unsigned long整数返回,这不能保证是64位长,超出了我的想法。

最后,即使libc会强制time_t保存一个64位的值,也不会改变一件事情。

你可以将你的应用程序深入到内核中,但是我认为这不值得。

标准库中不包含time64()/time32()函数。

标准头文件中没有定义time32_t/time64_t 。

time_t被定义为time.h如typedef __time_t time_t ;

经过长时间的重新定义,您会发现__time_t被定义为32位机器上的32位和64位机器上的64位。

如果你真的需要这个,为什么不把自己推出去?

typedef int32_t my_time32; typedef int64_t my_time64; my_time32 get_mytime32() { if (sizeof(time_t) == sizeof(my_time32)) return time(NulL); else { /* Check for overflow etc. here... */ return (my_time32)(time(NulL)); } }

和get_mytime64()类似。

如果你不关心溢出,简单的return time(NulL); 会因为C的隐式数值转换而对两个函数都有效。

总结

以上是内存溢出为你收集整理的有什么办法可以在Linux的32位程序中获得64位的time_t全部内容,希望文章能够帮你解决有什么办法可以在Linux的32位程序中获得64位的time_t所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存