博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记:关于 time_t
阅读量:7254 次
发布时间:2019-06-29

本文共 1601 字,大约阅读时间需要 5 分钟。

hot3.png

1.寻找 time_t 定义

本人的系统是:Debian GNU/Linux jessie/sid 64 位

寻找time_t 的定义:

    在  /usr/include/time.h 文件中的 time_t 定义如下:

    typedef __time_t time_t;

于是寻找 __time_t 的定义。

    在 /usr/include/x86_64-linux-gnu/bits/types.h 文件中的 __time_t 的定义如下:

    __STD_TYPE __TIME_T_TYPE __time_t;  /* Seconds since the Epoch.  */

于是寻找 __TIME_T_TYPE 的定义,然后迷路了……

    结果在 /usr/include/x86_64-linux-gnu/bits/typesizes.h 中找到了如下定义

    #define __TIME_T_TYPE       __SYSCALL_SLONG_TYPE

    暂且估计 time_t 是 long 类型吧。

2.验证 time_t

用如下代码进行验证,文件名保存为 03.c:

#include 
#include 
int main(int argc, char *argv[]){    time_t timer =  0xFFFFFFFFFF;    printf("sizeof(time_t) = %ld\n", sizeof(time_t));    printf("timer = %ld\n", timer);    printf("timer = %s\n", ctime(&timer));    return 0;}

使用gcc 开启警告选项,进行编译:

gcc 03.c -Wall

无错误,无警告。

其中的

 printf("timer = %ld\n", timer);

也侧面验证了time_t 为 long 或者是 unsigned long 类型。因为在gcc  开启警告的模式下,输出类型不匹配会发出警告。如果将其改为: 

printf("timer = %d\n", timer);

则会产生如下警告:

$ gcc 03.c -Wall03.c: In function ‘main’:03.c:10:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘time_t’ [-Wformat=]  printf("timer = %d\n", timer);  ^

不过,究竟是 long 还是 unsigned long 不能通过警告来确定,因为 "%lu" 和 "%ld" 两个都无警告信息产生。

运行之前的编译好的源程序,输出结果如下:

$ ./a.out sizeof(time_t) = 8timer = 1099511627775timer = Mon Feb 20 08:36:15 36812

本人系统为64位,long 位64位整型,这个数字就好大好大好大了,所以64位系统不用担心时间溢出的问题了。

根据《UNIX网络编程(第3版)》卷1中文版,P24页:

现有32位Unix系统上共同的编程模型位ILP32模型,表示整数(I)、长整数(L)和指针(P)都占用32位。64位Unix系统上变得流行的模型称为LP64模型,表示只有长整数(L)和指针(P)占用64位。

但是32位系统,如果定义位long 可能就会有问题了。32 位的 long只能跑到到 2038年,和《C专家编程》 书上P5 的案例相同。

转载于:https://my.oschina.net/lowkey2046/blog/224005

你可能感兴趣的文章
每天学习一个LINUX命令:pwd 显示当前目录(Print-Working-Directory)
查看>>
2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理
查看>>
linux下yum三种搭建方法
查看>>
QTP对日前控件的处理
查看>>
前端技术/前端冷知识集锦
查看>>
RGW Usage类解析
查看>>
模板引擎缓存
查看>>
php 5.6.11添加模块
查看>>
matlab-线性代数 根据二次型写矩阵
查看>>
Win 7 deskhelp
查看>>
Sybase SQL Anywhere 7 数据库修复成功
查看>>
发展到1Gbps及其以上的速度
查看>>
TurboMail为企业提供海量投递邮件群发系统
查看>>
Linux系统命令Cut使用
查看>>
我的友情链接
查看>>
chrome 跨域设置-(完善博客内容)
查看>>
12月8日学习内容整理:ORM中的创建多表关系,基于多表关系的插入记录,基于对象的跨表查询...
查看>>
利用nginx实现负载均衡
查看>>
【EXCRT模板】POJ2891/LuoGu4777Strange Way to Express Integers拓展中国剩余定理
查看>>
Python基础24_正则表达式,re模块,
查看>>