xref: /csrg-svn/usr.bin/time/time.c (revision 1127)
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