1 #include <u.h> 2 #include <libc.h> 3 4 void error(char *f, char *s); 5 void cat(int f, char *s); 6 7 void 8 main(int argc, char *argv[]) 9 { 10 int f, i; 11 12 if(argc == 1) 13 cat(0, "<stdin>"); 14 else for(i=1; i<argc; i++){ 15 f = open(argv[i], OREAD); 16 if(f < 0) 17 error("cat: can't open %s: ", argv[i]); 18 else{ 19 cat(f, argv[i]); 20 close(f); 21 } 22 } 23 exits(0); 24 } 25 26 void 27 cat(int f, char *s) 28 { 29 char buf[8192]; 30 long n; 31 32 while((n=read(f, buf, (long)sizeof buf))>0) 33 if(write(1, buf, n)!=n){ 34 error("cat: write error copying %s: ", s); 35 return; 36 } 37 } 38 39 void 40 error(char *f, char *s) 41 { 42 char buf[ERRLEN]; 43 44 errstr(buf); 45 fprint(2, f, s); 46 fprint(2, "%s\n", buf); 47 exits("error"); 48 } 49