123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- * tee-- pipe fitting
- */
- #include <u.h>
- #include <libc.h>
- int uflag;
- int aflag;
- int openf[100];
- char in[8192];
- int intignore(void*, char*);
- void
- main(int argc, char **argv)
- {
- int i;
- int r, n;
- ARGBEGIN {
- case 'a':
- aflag++;
- break;
- case 'i':
- atnotify(intignore, 1);
- break;
- case 'u':
- uflag++;
- /* uflag is ignored and undocumented; it's a relic from Unix */
- break;
- default:
- fprint(2, "usage: tee [-ai] [file ...]\n");
- exits("usage");
- } ARGEND
- USED(argc);
- n = 0;
- while(*argv) {
- if(aflag) {
- openf[n] = open(argv[0], OWRITE);
- if(openf[n] < 0)
- openf[n] = create(argv[0], OWRITE, 0666);
- seek(openf[n], 0L, 2);
- } else
- openf[n] = create(argv[0], OWRITE, 0666);
- if(openf[n] < 0) {
- fprint(2, "tee: cannot open %s: %r\n", argv[0]);
- } else
- n++;
- argv++;
- }
- openf[n++] = 1;
- for(;;) {
- r = read(0, in, sizeof in);
- if(r <= 0)
- exits(nil);
- for(i=0; i<n; i++)
- write(openf[i], in, r);
- }
- }
- int
- intignore(void *a, char *msg)
- {
- USED(a);
- if(strcmp(msg, "interrupt") == 0)
- return 1;
- return 0;
- }
|