xref: /plan9-contrib/sys/src/cmd/cat.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
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