xref: /xv6-public/cat.c (revision 8b58e810)
1*8b58e810Skaashoek #include "types.h"
2*8b58e810Skaashoek #include "stat.h"
30e84a0ecSrtm #include "user.h"
40e84a0ecSrtm 
50e84a0ecSrtm char buf[513];
60e84a0ecSrtm 
7*8b58e810Skaashoek void
8*8b58e810Skaashoek rfile(int fd)
90e84a0ecSrtm {
10*8b58e810Skaashoek   int cc;
110e84a0ecSrtm 
120e84a0ecSrtm   while((cc = read(fd, buf, sizeof(buf) - 1)) > 0){
130e84a0ecSrtm     buf[cc] = '\0';
140e84a0ecSrtm     puts(buf);
150e84a0ecSrtm   }
160e84a0ecSrtm   if(cc < 0){
170e84a0ecSrtm     puts("cat: read error\n");
180e84a0ecSrtm     exit();
190e84a0ecSrtm   }
20*8b58e810Skaashoek }
21*8b58e810Skaashoek 
22*8b58e810Skaashoek int
23*8b58e810Skaashoek main(int argc, char *argv[])
24*8b58e810Skaashoek {
25*8b58e810Skaashoek   int fd, i;
26*8b58e810Skaashoek 
27*8b58e810Skaashoek   if (argc <= 1) {
28*8b58e810Skaashoek     rfile(0);
29*8b58e810Skaashoek   } else {
30*8b58e810Skaashoek   for(i = 1; i < argc; i++){
31*8b58e810Skaashoek     fd = open(argv[i], 0);
32*8b58e810Skaashoek     if(fd < 0){
33*8b58e810Skaashoek       puts("cat: cannot open ");
34*8b58e810Skaashoek       puts(argv[i]);
35*8b58e810Skaashoek       puts("\n");
36*8b58e810Skaashoek       exit();
37*8b58e810Skaashoek     }
38*8b58e810Skaashoek     rfile(fd);
390e84a0ecSrtm     close(fd);
400e84a0ecSrtm   }
41*8b58e810Skaashoek   }
420e84a0ecSrtm 
430e84a0ecSrtm   exit();
440e84a0ecSrtm }
45