我在linux框中搜索并看到它是typedef
typedef __time_t time_t;
Run Code Online (Sandbox Code Playgroud)
但找不到__time_t定义.
在32位Linux内核上编译内核模块会导致
"__udivdi3" [mymodule.ko] undefined!
"__umoddi3" [mymodule.ko] undefined!
Run Code Online (Sandbox Code Playgroud)
在64位系统上一切都很好.据我所知,原因是32位Linux内核不支持64位整数除法和模数.
如何找到发出64位操作的代码.它们很难手动找到,因为我无法轻易检查"/"是32位宽还是64位宽.如果"正常"函数未定义,我可以grep它们,但这不可能在这里.还有另一种搜索引用的好方法吗?某种"机器代码grep"?
该模块由几千行代码组成.我真的不能手动检查每一行.
在Windows上我可以打电话:
_time32(__time32_t); // to get 32bit time_t
_time64(__time64_t); // to get 64bit time_t
Run Code Online (Sandbox Code Playgroud)
(32位和64位程序)
在Linux中有没有办法做到这一点(用GCC编译)?
我经常做很多计算,通过添加秒来构建相对于其他时间对象的时间对象.该代码应该在嵌入式设备和服务器上运行.大多数文件说它time_t是一些算术类型,通常存储自纪元以来的时间.假设time_t存储了几秒钟后,它有多安全?如果我们可以假设,那么我们可以只使用加法和减法,而不是localtime,mktime和difftime.
到目前为止,我已经通过使用a来解决问题constexpr bool time_tUsesSeconds,表示假设time_t使用秒是否安全.如果它是不可移动的假设time_t是在几秒钟内,有没有办法自动初始化该常量?
time_t timeByAddingSeconds(time_t theTime, int timeIntervalSeconds) {
if (Time_tUsesSeconds){
return theTime + timeIntervalSeconds;
} else {
tm timeComponents = *localtime(&theTime);
timeComponents.tm_sec += timeIntervalSeconds;
return mktime(&timeComponents);
}
}
Run Code Online (Sandbox Code Playgroud)