Linux编程---时间相关
Linux编程---时间相关
时间相关的东西很难分类.所以我就写一篇好了.
一.系统时间
1.time函数
time_t time(time_t *tloc);
double difftime(time_t time1,time_t timeo);
time返回系统自1970年1月1日以来,经历了多少秒的时间.同时可以通过返回值和参数来得到.
difftime则返回两个参数的时间之差.并且结果是作为双精度浮点数返回.
2.gettimeofday函数
int gettimeofday(struct timeval *restrict tp,void *restrict tzp);
int settimeofday(const struct timeval * tp,const void *tzp);
int adjtime(const struct timeval *delta,struct timeval *olddelta);
这里都是指的从1970年1月1日到现在的时间.
并且三个函数都用到了struct timeval结构体.我就说一下.
struct timeval{
time_t tv_sec; 这个表示秒
SUSEconds_t tv_usec 这个表示微秒
}
头两个函数的第二个参数一定要写NULL.不然在Linux下会报错.
最后一个函数比较有趣,它是用来把系统时钟调快或者调慢.
简单来说,如果参数delta是正,那么加快系统时钟的步伐.为负则减慢时钟的步伐.通常以1%的速率来调整.第二个参数返回仍需调整的时间.
这个函数估计只有对时间要求比较高的服务器程序上才有用吧.
《Unix/Linux编程实践教程》之Shell编程一
《Unix/Linux编程实践教程》之Shell编程二
《Unix/Linux编程实践教程》之管道
Unix/Linux编程实践教程【高清PDF中文版+附录光盘+代码】:
二.时间格式转换
struct tm *gmtime(const time_t * time);
struct tm *localtime(const time_t * time);
time_t mktime(struct tm *brokentime);
第一个函数由time_t类型的参数转换为struct tim结构体的参数.
第二个函数则会自动修正时区和进行与夏令时有关的调整
第三个函数则是反向转换.并且会设置brokentime中的成员为适当的值.
实际上这几个函数中还用到了tzset来获取时区信息.
struct tm结构中成员类型都是int类型.以tm_开头.有以下成员
sec 秒
min 分钟
hour 小时
mday 月中日期
mon 月份0~11
year 自1900年以来的年数
wday 星期几
yday 以1月1日以来的天数0~365
isdst 标志夏令时是否起作用.正表示起作用,0表示不起作用,负数表示无效(应该是会让函数错误返回吧)
格式化日期与时间
char *asctime(const struct tm *tmptr);
char *ctime(const time_t *timeval);
两个函数都返回如同data命令锁输出的时间字符串.
ctime相当于是asctime(localtime(timeval))这种调用.
为了对日期和时间字符串格式进行更为灵活和精确的控制,UNIX系统还提供了另一对函数
size_t strftime(char *s,size_t maxsize,const char *format,struct tm *timeptr);
char *strptime(const char *buf,const char *format,struct tm *timeptr);
第一个函数就类似于sscanf一样.通过%和特定符号来输出相关格式信息.具体的就不多说了,
第二个函数则是第一个函数的逆过程.把串解析到timeptr中.
三.CPU时间与墙钟时间
CPU时间就是占用CPU的时间.可以进一步分为用户时间(执行程序指令)和系统时间(运行过程中系统服务所用时间).
墙钟时间就是现实中进程运行了的时间.每次运行进程都可以产生不一样的结果.
clock_t clock();
这个函数返回CPU时间,包含用户时间和系统调用时间.这个clock表示系统内部使用的时间单位(1/CLOCKS_PER_SEC 秒).
clock_t times(struct tms *buffer);
这个函数可以报告更详细的CPU时间信息.其结果返回到buffer中.返回值返回墙钟时间.
tms结构体成员类型全部为clock_t.有以下成员
tms_utime 用户时间
tms_stime 系统时间
tms_cutime 子进程时间.只包含用户时间.只包含wait或waitpid等待了的子进程.
tms_cstime 子进程时间.只包含系统时间.只包含wait或waitpid等待了的子进程.
注意,这个结构体成员类型虽然是clock.但是要用_SC_CLK_TCK来除.因为clock函数是C库函数,而times()则是系统调用.两者的基础时间标准不一样.
更多详情见请继续阅读下一页的精彩内容:
|
评论暂时关闭