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