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