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()则是系统调用.两者的基础时间标准不一样.

更多详情见请继续阅读下一页的精彩内容:

  • 1
  • 2
  • 下一页

相关内容