linux有关时间函数,Linux时间相关函数总结

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

最近学习了muduo网络库的源代码,学习了很多计时的方法,联想到Linux环境下无论是表示时刻还是表示时间段的,都有很多函数可以使用。写下这篇博客做一个总结

概念:时间与时刻

我们日常引用的“时间”一词,严格来说有两种意思,一是“时刻”,而是“时间间隔”

“时刻”是一种瞬时概念,“现在几点”就是一种时刻概念。在Linux系统中采用时间戳(TimeStamp)表示时刻。具体的时间戳有不同的数据结构表示方法,含义是自1970年开始所经历的时间,可以是秒数,也可以包含微秒等。

如果我们用一个64位的有符号数表示自1970年开始经过的时间,每年以365天计,则它最多可以表达的年限数大约是(2^63)/365/24/60/60 = 2.92e12(年)

即使存储微秒数,可以表示的年限范围也可以达到(2^63)/365/24/60/60/1000/1000 = 2.92e6(年)

表示的范围是十分可观的。

“时间间隔”是一种“间隔”,“持续”的概念,可以用简单的int,short表示间隔的秒数或毫秒数,也可以以结构体提高表示的精度,包含秒数和微秒数等。

相关数据结构1

2

3

4

5time_t

///表示自Epoch经过的秒数

///长度应该与操作系统有关, 源码经过了一系列的宏定义和封装

///在我的64位Ubuntu操作系统下是 long int型1

2

3

4

5

6struct {

time_t tv_sec;

susecons_t tv_usec;///long int

};

///表示自Epoch至今经过的秒数和毫秒数1

2

3

4

5

6struct timezone{

int tz_minuteswest;

int tz_dsttime;

};

///夏令时的相关数据结构

///作为一个中国人,我真的不是很熟悉夏令时T-T1

2

3

4

5

6

7

8

9

10

11

12

13struct tm {

int tm_sec; /* Seconds (0-60) */

int tm_min; /* Minutes (0-59) */

int tm_hour; /* Hours (0-23) */

int tm_mday; /* Day of the month (1-31) */

int tm_mon; /* Month (0-11) */

int tm_year; /* Year - 1900 */

int tm_wday; /* Day of the week (0-6, Sunday = 0) */

int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */

int tm_isdst; /* Daylight saving time */

};

///方便阅读和其他转换操作的一种数据结构1

2

3

4

5

6struct timespec {

time_t tv_sec; /* Seconds */

long tv_nsec; /* Nanoseconds */

};

///表示“时间间隔”

///精确到纳秒1

2

3

4

5

6

7struct itimerspec {

struct timespec it_interval; /* Timer interval */

struct timespec it_value; /* Initial expiration */

};

///用于定时的数据结构,每一个成员都表示时间间隔

///it_interval 表示第一次唤醒定时器后,周期性唤醒定时器的时间间隔

///it_value 表示第一次唤醒定时器,距今的时间间隔1

2

3

4

5

6

7

8struct timeb {

time_t time;

unsigned short millitm;

short timezone;

short dstflag;

};

///顾名思义的数据结构,只被 ftime 函数使用了1

2

3

4

5

6struct {

time_t tv_sec; /* seconds */

suseconds_t tv_usec; /* microseconds */

};

///表示“时间间隔”

///精确到微秒1

2

3

4

5

6

7struct itimerval {

struct it_interval; /* Interval for periodic timer */

struct it_value; /* Time until next expiration */

};

///用于定时的数据结构,每一个成员都表示时间间隔

///it_interval 表示第一次唤醒定时器后,周期性唤醒定时器的时间间隔

///it_value 表示第一次唤醒定时器,距今的时间间隔

Linux函数与分类

Linux中时间相关的函数,大致可以分为4类获取当前时间戳。获得两个时间戳可以计算时间间隔

日期格式转换

定时操作。在指定的时刻进行特定任务,或在一定时间间隔之后进行特定任务

设置时间

具体的函数功能请参考linux手册,在这里只做总结,不进行具体讲解功能函数获取时间戳time, ftime, gettimeofday

日期格式转换sctime, ctime, gmtime, localtime,

mktime, asctime_r, ctime_r, gmtime_r, localtime_r

定时操作sleep, alarm, usleep, nanosleep,

clock_nanosleep, getitimer/setitimer,

timer_create/timer_settime/timer_gettime/timer_delete, timerfd_create/timerfd_gettime/timerfd_settime

设置时间settimeofday, clock_settime数据结构函数精确度struct timebftime毫秒

time_ttime, ctime, ctime_r, gmtime,

gmtime_r, localtime, localtime_r秒

struct timevalgettimeofday, settimeofday,微秒

struct timespec/struct itimerspecclock_gettime, clock_settime, timer_settime,

timer_gettime, timefd_gettime, timerfd_settime纳秒

struct timeval/struct itimervalgetitimer, setitimer,微秒

struct tmasctime, asctimer_r, localtime_r, mktime秒

参考资料

《Linux多线程服务端编程,使用muduo c++网络库》 第7,8章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值