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