微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有什么办法可以在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的隐式数值转换而对两个函数都有效。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐