|
|
1.1 ! root 1: /* ! 2: * tee-- pipe fitting ! 3: */ ! 4: ! 5: #include <signal.h> ! 6: int uflag; ! 7: int aflag; ! 8: int openf[100]; ! 9: ! 10: char in[512]; ! 11: ! 12: ! 13: main(argc,argv) ! 14: char *argv[]; ! 15: { ! 16: register i, j; ! 17: int r, n; ! 18: ! 19: while(argc > 1 && argv[1][0] == '-') { ! 20: switch(argv[1][1]) { ! 21: case 'a': ! 22: aflag++; ! 23: break; ! 24: ! 25: case 'i': ! 26: signal(SIGINT, SIG_IGN); ! 27: break; ! 28: ! 29: case 'u': ! 30: uflag++; ! 31: break; ! 32: } ! 33: argv++; ! 34: argc--; ! 35: } ! 36: ! 37: n = 0; ! 38: while(argc-- > 1) { ! 39: if(aflag) { ! 40: openf[n] = open(argv[1], 1); ! 41: if(openf[n] < 0) ! 42: openf[n] = creat(argv[1], 0666); ! 43: lseek(openf[n], 0L, 2); ! 44: } else ! 45: openf[n] = creat(argv[1], 0666); ! 46: if(openf[n] < 0) { ! 47: puts("tee: cannot open "); ! 48: puts(argv[1]); ! 49: puts("\n"); ! 50: } else ! 51: n++; ! 52: argv++; ! 53: } ! 54: openf[n++] = 1; ! 55: ! 56: for(;;) { ! 57: r = read(0, in, 512); ! 58: if(r <= 0) ! 59: exit(0); ! 60: if(uflag) { ! 61: for(j=0; j<r; j++) ! 62: for(i=0; i<n; i++) ! 63: write(openf[i], &in[j], 1); ! 64: } else ! 65: for(i=0; i<n; i++) ! 66: write(openf[i], in, r); ! 67: } ! 68: } ! 69: ! 70: puts(s) ! 71: char *s; ! 72: { ! 73: while(*s) ! 74: write(2, s++, 1); ! 75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.