进程环境与进程控制(5): 进程时间

#include  < sys / times.h >
clock_t times(
struct  tms  * buf);

返回值: 若成功则返回流逝的墙上时钟时间, 若出错返回-1.
所有由此函数返回的clock_t值都用_SC_CLK_TCK变换成秒数.(由sysconf函数返回的每秒时钟滴答数)
此函数填写由buf指向的tms结构, 该结构定义如下:

struct  tms
{
    clock_t tms_utime;  
/* user CPU time */
    clock_t tms_stime;  
/* system CPU time */
    clock_t tms_cutime; 
/* user CPU time, terminated children */
    clock_t tms_cstime; 
/* system CPU time, terminated children */
}
;

注意: 此结构没有包含墙上时钟是的任何测量值. 作为替代, times函数返回墙上时钟时间作为函数值. 此值是相对于过去的某一时刻测试的, 所以不能用其绝对值, 而必须使用其相对值.
例如, 调用times, 保存其返回值. 在以后某个时间再次调用times, 从新的返回值中减去以前的返回值, 此差值就是墙上时钟时间.
该结构中的后两个成员是针对子进程的变量, 包含了用wait, waitpid等待到的各个子进程的值.

 

实例代码:

#include  < sys / times.h >

static   void  pr_times(clock_t, struct tms  * , struct tms  * );
static   int  do_cmd( char   * );

int  main()
{
    
int i;
    setbuf(stdout, NULL);
    
for (i = 1; i < argc; i++)
        do_cmd(argv[i]);
    
    
return 0;
}


static   int  do_cmd( char   * cmd)
{
    struct tms tmsstart, tmsend;
    clock_t start, end;
    
int status;

    printf(
" command: %s ", cmd);

    
if ((start = times(&tmsstart)) == -1)
        
/* error handler */

    
if ((status == system(cmd)) < 0)
        
/* error handler */

    
if (end = times(&tmsend)) == -1_
        
/* error handler */

    pr_times(end
-start, &tmsstart, &tmsend);

    
return status;
}


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)
            
/* error hanlder */
    printf(
" read: %7.2f ", read / (double)clktck);
    printf(
" user: %7.2f ", tmsend->tms_utime - tmsstart->tms_utime) / (double) clktck);
    ...
    ...
}

运行:

$ ./a.out "sleep 5" "date"

command: sleep 5
 real:      5.02
 user:      0.00
 sys:       0.00
 child user:      0.01
 child sys:       0.00

command: date
Fri Jun 22 17:11:20 EST 2007
 real:      0.01
 user:      0.00
 sys:       0.00
 child user:      0.01
 child sys:       0.00

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值