xref: /inferno-os/utils/cat/cat.c (revision 7ef44d652ae9e5e1f5b3465d73684e4a54de73c0)
1 #include <lib9.h>
2 
3 void
4 cat(int f, char *s)
5 {
6 	char buf[8192];
7 	long n;
8 
9 	while((n=read(f, buf, (long)sizeof buf))>0)
10 		if(write(1, buf, n)!=n)
11 			sysfatal("write error copying %s: %r", s);
12 	if(n < 0)
13 		sysfatal("error reading %s: %r", s);
14 }
15 
16 void
17 main(int argc, char *argv[])
18 {
19 	int f, i;
20 
21 	argv0 = "cat";
22 	if(argc == 1)
23 		cat(0, "<stdin>");
24 	else for(i=1; i<argc; i++){
25 		f = open(argv[i], OREAD);
26 		if(f < 0)
27 			sysfatal("can't open %s: %r", argv[i]);
28 		else{
29 			cat(f, argv[i]);
30 			close(f);
31 		}
32 	}
33 	exits(0);
34 }
35 
36