|
|
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.