历史上,UNX系统使用过两种不同的时间值
- 日历时间。该值是自协调世界时( Coordinated Universal Time,UTC)1970年1月1日00:000这个特定时间以来所经过的秒数累计值(早期的手册称UTC为格林尼治标准时间)。这些时间值可用于记录文件最近一次的修改时间等。系统基本数据类型time_t用于保存这种时间值。
- 进程时间。也被称为CPU时间,用以度量进程使用的中央处理器资源。进程时间以时钟滴答计算。每秒钟曾经取为50、60或100个时钟滴答,调用syscon函数得到每秒的时钟滴答数,系统基本数据类型 clock_t保存这种时间值。
当度量一个进程的执行时间时,UNX系统为一个进程维护了3个进程时间值:
- 时钟时间:时钟时间又称为墙上时钟时间( wall clock time),它是进程运行的时间总量,其值与系统中同时运行的进程数有关。每当在本书中提到时钟时间时,都是在系统中没有其他活动时进行
度量的。 - 用户CPU时间:执行用户指令所用的时间总量。
- 系统CPU时间:为该进程执行内核程序所经历的的时间。用户用户CPU时间+系统CPU时间=CPU时间
1.times函数
#include <sys/times.h>
clock_t times(struct tms *buf)
返回值:若成功则返回墙上时钟时间(单位:时钟滴答数),如果出错则返回-1。此函数填写由buf指向的tms结构体,该结构体定义如下:
struct tms
{
clock_t tms_utime; // tms_utime记录的是进程执行用户代码的时间.
clock_t tms_stime; // tms_stime记录的是进程执行内核代码的时间.
clock_t tms_cutime; // tms_cutime记录的是子进程执行用户代码的时间.
clock_t tms_cstime; // tms_cstime记录的是子进程执行内核代码的时间.
}
此函数常用来计算进程运行的时间。
#include <stdio.h>
#include <unistd.h>
#include <sys/tim