Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2095649
  • 博文数量: 249
  • 博客积分: 1305
  • 博客等级: 军士长
  • 技术积分: 4733
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-17 10:37
个人简介

不懂的东西还有很多,随着不断的学习,不懂的东西更多,无法消灭更多不懂的东西,那就不断的充实自己吧。 欢迎关注微信公众号:菜鸟的机器学习

文章分类

全部博文(249)

文章存档

2015年(1)

2014年(4)

2013年(208)

2012年(35)

2011年(1)

分类: C/C++

2013-07-26 17:17:19


    长期以来,UNIX系统一直使用两种不同的时间值:
    (1)日历时间:该值是自1970年1月1日00:00:00以来国际标准时间(UTC)所经过的秒数累计值(UTC曾被称为格林尼治时间)。这些时间值可用于记录文件最后一次的修改时间等。
    系统基本数据类型time_t用于保存这种时间值。

    (2)进程时间:这也被称为CPU时间,用以度量进程使用的中央处理机资源。进程时间以时钟滴答计算,历史上曾经取每秒钟为50、60或100个滴答。
    系统基本数据类型clock_t用于保存这种时间值。
    当度量一个进程的执行时间时,UNIX系统使用三个进程时间值:
    ——时钟时间
    ——用户CPU时间
    ——系统CPU时间
    时钟时间又称为墙上时钟时间。它是进程运行的时间总量,其值与系统中同时运行的进程数有关。
    用户CPU时间是执行用户指令所用的时间。系统CPU时间是为该进程执行额你好程序所经历的时间。例如,每当一个进程执行一个系统服务时,例如read或write,则在内核内执行该服务所花费的时间久计入该进程的系统CPU时间。用户CPU时间和系统CPU时间之和常被称为CPU时间。
    要取得任何一个进程的时钟时间、用户CPU时间和系统CPU时间是很容易的——只要时间time(1),其参数是要度量其执行时间的命令。
    此链接有一个关于time命令的较为详细的用法:http://jafy00.blog.51cto.com/2594646/902478    


时间和日期例程
    由UNIX内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数。这种秒数以数据类型time_t表示的,我们称之为日历时间。日历时间包括时间和日期。UNIX在这方面与其他操作系统的区别是:(1)以国际标准时间而非本地时间计时;(2)可自动进行转换,例如变换到夏时制;(3)将时间和日期作为一个量值保存。
    time函数返回当前的时间和日期。
  1. #include <time.h>

  2. time_t time(time_t *calptr);
  3.                             返回值:若成功则返回时间值,若出错则返回-1
    时间值总是作为函数的返回值。如果参数不为空,则时间值也存放在由calptr指向的单元内。

    与time函数相比,gettimeofday提供了更高的分辨率(最高为微秒级)。这对某些应用很重要。
  1. #include <sys/time.h>

  2. int gettimeofday(struct timeval *restrict tp, void *restrict tzp);
  3.                                                                     返回值:总是返回0
    tzp唯一的合法值是NULL,其他值则产生不确定的结果。
    gettimeofday函数将当前时间存放在tp指向的timeval结构中,而该结构存储秒和微秒。
  1. struct timeval
  2. {
  3.     time_t tv_sev;    //seconds
  4.     long tv_usec; //microseconds
  5. };
·    一旦取得这种以秒计的整型时间值后,通常要调用另一个时间函数将其转换为人们可读的时间和日前。下图说明了各种时间函数之间的关系。(图中的虚线表示的四个函数localtime、mktime、ctime和strftime都受到环境变量TZ的影响)
    

    两个函数localtime和gmtime将日历时间转换为以年、月、日、时、分、秒、周日表示的时间,并将这些存放在一个tm结构中。
    
    秒可以超过59的原因是可以表示闰秒。注意,除了月日字段外,其他字段的值都以0开始。如果夏时制生效,则夏时制标志值为正;如果非夏时制时间,则该标志值为0;如果此信息不可用,则其值为负数。
  1. #include <time.h>

  2. struct tm *gmtime(const time_t *calptr);
  3. struct tm *localtime(const time_t *calptr);

  4.                                             两个函数返回值:执行tm结构的指针
    localtime和gmtime之间的区别是:localtime将日历时间转换为本地时间(考虑到本地时区和夏时制标志),而gmtime则将日历时间转换成为国际标准时间年、月、日、时、分、秒、周日。
    函数mktime以本地时间的年月日等作为参数,将其转换成为time_t值。
  1. #include <time.h>

  2. time_t mktime(struct tm *tmptr);        

  3.                                             返回值:若成功则返回日历时间,若出错则返回-1
    asctime和ctime函数产生大家都熟悉的26字节的字符串,这与date命令的系统默认输出形式类似,例如:Tue Feb 10 18:27:38 2004\n\0
  1. #include <time.h>

  2. char *asctime(const struct tm *tmptr);
  3. char *ctime(const time_t calptr);

  4.                                             两个函数的返回值:指向以null结尾的字符串的指针
    asctime的参数是指向年、月、日等字符串的指针,而ctime的参数是执行日历时间的指针。
    最后一个时间函数是strftime,它是非常复制的类似于printf的时间值函数。
  1. #include <time.h>

  2. size_t strftime(char *restrict buf, size_t maxsize, const char *restrict format, const struct tm *restrict tmptr);
  3.                                             返回值:若有空间则返回存入数组的字符数,否则返回0
    关于此函数的详解见《UNIX高级环境编程》第144-145页。




    引自:《UNIX高级环境编程》
    
阅读(1374) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~