Путь: Toys/POSIX, команды версии: Ver.4 Ver.9 tee Комментарии в файле tee.c :
Исходный текст в файле tee.c #define FOR_tee #include "toys.h" GLOBALS( void *outputs; int out; ) struct fd_list { struct fd_list *next; int fd; }; // Open each output file, saving filehandles to a linked list. static void do_tee_open(int fd, char *name) { struct fd_list *temp; temp = xmalloc(sizeof(struct fd_list)); temp->next = TT.outputs; if (1 == (temp->fd = fd)) TT.out++; TT.outputs = temp; } void tee_main(void) { struct fd_list *fdl; int len; if (FLAG(i)) xsignal(SIGINT, SIG_IGN); // Open output files (plus stdout if not already in output list) loopfiles_rw(toys.optargs, O_RDWR|O_CREAT|WARN_ONLY|(FLAG(a)?O_APPEND:O_TRUNC), 0666, do_tee_open); if (!TT.out) do_tee_open(1, 0); // Read data from stdin, write to each output file. for (;;) { if (1>(len = xread(0, toybuf, sizeof(toybuf)))) break; for (fdl = TT.outputs; fdl;fdl = fdl->next) if (len != writeall(fdl->fd, toybuf, len)) toys.exitval = 1; } } |