uuprog

annotate tee.c @ 0:4f628556fa3e

uuprog initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 25 Aug 2011 08:53:01 +0300
parents
children
rev   line source
nuclear@0 1 /*! cc -o tee tee.c */
nuclear@0 2 #include <stdio.h>
nuclear@0 3 #include <stdlib.h>
nuclear@0 4 #include <string.h>
nuclear@0 5 #include <errno.h>
nuclear@0 6
nuclear@0 7 void output(FILE **farr, int count, char *data, size_t bytes);
nuclear@0 8
nuclear@0 9 int main(int argc, char **argv)
nuclear@0 10 {
nuclear@0 11 char buf[512];
nuclear@0 12 size_t rdbytes;
nuclear@0 13 FILE **files;
nuclear@0 14 int i, fnum = 0;
nuclear@0 15
nuclear@0 16 if(!(files = malloc((argc - 1) * sizeof *files))) {
nuclear@0 17 perror("malloc failed");
nuclear@0 18 return EXIT_FAILURE;
nuclear@0 19 }
nuclear@0 20
nuclear@0 21 for(i=1; i<argc; i++) {
nuclear@0 22 if(!(files[fnum] = fopen(argv[i], "wb"))) {
nuclear@0 23 fprintf(stderr, "failed to write to %s: %s\n", argv[i], strerror(errno));
nuclear@0 24 } else {
nuclear@0 25 fnum++;
nuclear@0 26 }
nuclear@0 27 }
nuclear@0 28
nuclear@0 29 while((rdbytes = fread(buf, 1, sizeof buf, stdin))) {
nuclear@0 30 output(files, fnum, buf, rdbytes);
nuclear@0 31 }
nuclear@0 32
nuclear@0 33 for(i=0; i<fnum; i++) {
nuclear@0 34 fclose(files[i]);
nuclear@0 35 }
nuclear@0 36 return 0;
nuclear@0 37 }
nuclear@0 38
nuclear@0 39 void output(FILE **farr, int count, char *data, size_t bytes)
nuclear@0 40 {
nuclear@0 41 int i;
nuclear@0 42
nuclear@0 43 fwrite(data, 1, bytes, stdout);
nuclear@0 44 for(i=0; i<count; i++) {
nuclear@0 45 fwrite(data, 1, bytes, farr[i]);
nuclear@0 46 }
nuclear@0 47 }