目录
前言
本章主要介绍进程时间times的使用,struct tms结构体,以及times使用实例。
一、times函数
#include<sys/times.h>
clock_t times(struct tms *buf);
二、struct tms结构体
struct tms{
clock_t tms_utime;// 用户CPU时间
clock_t tms_stime;//系统CPU时间
clock_t tms_cutime;//终止的子进程,用户CPU时间
clock_t tms_cstime;//终止的子进程,系统CPU时间
};
二、例程
1.times()函数
代码如下(示例):
static void pr_times(clock_t real,struct tms *tmsstart,struct tms *tmsend) { static long clktck = 0; if(clktck == 0) if((clktck = sysconf(_SC_CLK_TCK)) < 0) err_sys("sysconf error"); printf(" real: %7.2f\n",real/(double)clktck); printf(" user: %7.2f\n",(tmsend->tms_utime - tmsstart->tms_utime)/(double)clktck); printf(" sys: %7.2f\n",(tmsend->tms_stime - tmsstart->tms_stime)/(double)clktck); printf(" child user: %7.2f\n",(tmsend->tms_cutime - tmsstart->tms_cutime)/(double)clktck); printf(" child sys: %7.2f\n",(tmsend->tms_cstime - tmsstart->tms_cstime)/(double)clktck); } static void do_cmd(char *cmd) { struct tms tmsstart,tmsend; clock_t start,end; int status; printf("\ncommand: %s\n",cmd); if((start=times(&tmsstart)) == -1) err_sys("times error"); if((status = system(cmd)) < 0) err_sys("system() error"); if((end=times(&tmsend)) == -1) err_sys("times error"); pr_times(end-start,&tmsstart,&tmsend); pr_exit(status); } void unix_8_31_times(int num,char **name) { int i; setbuf(stdout,NULL); for(i=1;i<num;i++) do_cmd(name[i]); exit(0); } #define UNIX_8_31_TIMES int main(int argc, char *argv[]) { #ifdef UNIX_8_31_TIMES if(argc < 2) err_quit("usage: Is directory name"); unix_8_31_times(argc,argv); #endif printf("MAIN END\n"); return 0; }
代码结果:代码说明:所有由此函返回的clock_t值都用_SC_CLK_TCK(由sysconf函数返回的每秒始终滴答数)转化成秒
总结
本章主要介绍了进程时间times函数的使用。