UNIX环境高级编程笔记(9)- 进程时间times

目录

文章目录

前言

一、times函数

二、struct tms结构体

二、例程

1.times()函数

 

总结


 


前言

本章主要介绍进程时间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函数的使用。

上一篇:2021-11-01


下一篇:[SAP][TMS] 更改tmsadm 密码