1*1127Sbill static char *sccsid = "@(#)time.c 4.1 (Berkeley) 10/01/80"; 2*1127Sbill /* time command */ 3*1127Sbill 4*1127Sbill #include <stdio.h> 5*1127Sbill #include <signal.h> 6*1127Sbill #include <sys/types.h> 7*1127Sbill #include <sys/times.h> 8*1127Sbill 9*1127Sbill extern int errno; 10*1127Sbill extern char *sys_errlist[]; 11*1127Sbill 12*1127Sbill main(argc, argv) 13*1127Sbill char **argv; 14*1127Sbill { 15*1127Sbill struct tms buffer, obuffer; 16*1127Sbill int status; 17*1127Sbill register p; 18*1127Sbill time_t before, after; 19*1127Sbill 20*1127Sbill if(argc<=1) 21*1127Sbill exit(0); 22*1127Sbill time(&before); 23*1127Sbill p = fork(); 24*1127Sbill if(p == -1) { 25*1127Sbill fprintf(stderr, "Try again.\n"); 26*1127Sbill exit(1); 27*1127Sbill } 28*1127Sbill if(p == 0) { 29*1127Sbill execvp(argv[1], &argv[1]); 30*1127Sbill fprintf(stderr, "%s: %s\n", argv[1], sys_errlist[errno]); 31*1127Sbill exit(1); 32*1127Sbill } 33*1127Sbill signal(SIGINT, SIG_IGN); 34*1127Sbill signal(SIGQUIT, SIG_IGN); 35*1127Sbill times(&obuffer); 36*1127Sbill while(wait(&status) != p) 37*1127Sbill times(&obuffer); 38*1127Sbill time(&after); 39*1127Sbill if((status&0377) != 0) 40*1127Sbill fprintf(stderr,"Command terminated abnormally.\n"); 41*1127Sbill times(&buffer); 42*1127Sbill fprintf(stderr,"\n"); 43*1127Sbill printt("real", (after-before) * 60); 44*1127Sbill printt("user", buffer.tms_cutime - obuffer.tms_cutime); 45*1127Sbill printt("sys ", buffer.tms_cstime - obuffer.tms_cstime); 46*1127Sbill exit(status>>8); 47*1127Sbill } 48*1127Sbill 49*1127Sbill char quant[] = { 6, 10, 10, 6, 10, 6, 10, 10, 10 }; 50*1127Sbill char *pad = "000 "; 51*1127Sbill char *sep = "\0\0.\0:\0:\0\0"; 52*1127Sbill char *nsep = "\0\0.\0 \0 \0\0"; 53*1127Sbill 54*1127Sbill printt(s, a) 55*1127Sbill char *s; 56*1127Sbill long a; 57*1127Sbill { 58*1127Sbill char digit[9]; 59*1127Sbill register i; 60*1127Sbill char c; 61*1127Sbill int nonzero; 62*1127Sbill 63*1127Sbill for(i=0; i<9; i++) { 64*1127Sbill digit[i] = a % quant[i]; 65*1127Sbill a /= quant[i]; 66*1127Sbill } 67*1127Sbill fprintf(stderr,s); 68*1127Sbill nonzero = 0; 69*1127Sbill while(--i>0) { 70*1127Sbill c = digit[i]!=0 ? digit[i]+'0': 71*1127Sbill nonzero ? '0': 72*1127Sbill pad[i]; 73*1127Sbill if (c) 74*1127Sbill fprintf(stderr,"%c",c); 75*1127Sbill nonzero |= digit[i]; 76*1127Sbill c = nonzero?sep[i]:nsep[i]; 77*1127Sbill if (c) 78*1127Sbill fprintf(stderr,"%c",c); 79*1127Sbill } 80*1127Sbill fprintf(stderr,"\n"); 81*1127Sbill } 82