xref: /xv6-public/cat.c (revision 89826f41)
18b58e810Skaashoek #include "types.h"
28b58e810Skaashoek #include "stat.h"
30e84a0ecSrtm #include "user.h"
40e84a0ecSrtm 
51b789e1dSrsc char buf[512];
60e84a0ecSrtm 
78b58e810Skaashoek void
cat(int fd)83341e30fSrsc cat(int fd)
90e84a0ecSrtm {
101b789e1dSrsc   int n;
110e84a0ecSrtm 
12*89826f41SFrans Kaashoek   while((n = read(fd, buf, sizeof(buf))) > 0) {
13*89826f41SFrans Kaashoek     if (write(1, buf, n) != n) {
14*89826f41SFrans Kaashoek       printf(1, "cat: write error\n");
15*89826f41SFrans Kaashoek       exit();
16*89826f41SFrans Kaashoek     }
17*89826f41SFrans Kaashoek   }
181b789e1dSrsc   if(n < 0){
191b789e1dSrsc     printf(1, "cat: read error\n");
200e84a0ecSrtm     exit();
210e84a0ecSrtm   }
228b58e810Skaashoek }
238b58e810Skaashoek 
248b58e810Skaashoek int
main(int argc,char * argv[])258b58e810Skaashoek main(int argc, char *argv[])
268b58e810Skaashoek {
278b58e810Skaashoek   int fd, i;
288b58e810Skaashoek 
298b58e810Skaashoek   if(argc <= 1){
303341e30fSrsc     cat(0);
311b789e1dSrsc     exit();
321b789e1dSrsc   }
331b789e1dSrsc 
348b58e810Skaashoek   for(i = 1; i < argc; i++){
351b789e1dSrsc     if((fd = open(argv[i], 0)) < 0){
361b789e1dSrsc       printf(1, "cat: cannot open %s\n", argv[i]);
378b58e810Skaashoek       exit();
388b58e810Skaashoek     }
393341e30fSrsc     cat(fd);
400e84a0ecSrtm     close(fd);
410e84a0ecSrtm   }
420e84a0ecSrtm   exit();
430e84a0ecSrtm }
44