没有合适的资源?快使用搜索试试~ 我知道了~
2038年千年虫问题在32位机上的解决方案
需积分: 5 4 下载量 169 浏览量
2022-12-28
19:07:57
上传
评论 1
收藏 457KB PDF 举报
温馨提示
试读
1页
时间问题,在linux系统上历史悠久。 因为时间的历史,才有了1970-1-1的起始。 因为这个起始,32位机记录时间的尽头。 因为32位机的int最大限度即将用尽, 可我们还要面临兼容性问题 ........ 这里,将给出一种解决方案。
资源推荐
资源详情
资源评论
关于系统时间设置 2038 年的问题
历史遗留问题:
1970 年被定义为 Unix 或类 Unix 系统的元纪。所有系统都以 1970 年 1 月 1 日 0 点 0 分 0 秒
作为时间的基准点,用秒数来表示系统时间,也即当前系统时间是从基准时间(1970 年 1
月 1 日 0 点 0 分 0 秒)走过多少秒之后的时间。
用简单公式来表即: 系统时间 = 基准时间 + 秒数
在 POSIX 标准中,将表示秒数的类型定义为 time_t,而它是 32 位有符号整数类型,在 32 位
系统上,能表示的最大值为 0x7fffffff。当 time_t 取最大值时表示系统时间为 2038-01-19
03:14:07,时间再往后走时,time_t 会溢出变成一个负值,此时系统时间会倒流回到 1901
年。
一个解决方案:
2038 年问题涉及面众多(用户态 glibc、内核态、文件系统等),暂时无法完全修复此问题。
故先将内核中的 time_t 改为无符号 int 类型。
但是这样改完之后,使用标准时间函数接口获取的时间均从 1901 年开始,需要注意要想正
确设置和读取 2038 年之后的时间,只能使用 settimeofday、gettimeofday、clock_gettime 等
系统调用,并且获取的 timespec. tv_sec 和 timeval. tv_sec 需要按照无符号 int 类型处理。
资源评论
stave
- 粉丝: 7
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功