xref: /plan9/sys/src/cmd/aux/rdwr.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*80ee5cbfSDavid du Colombier #include <u.h>
2*80ee5cbfSDavid du Colombier #include <libc.h>
3*80ee5cbfSDavid du Colombier 
4*80ee5cbfSDavid du Colombier int wrrd;
5*80ee5cbfSDavid du Colombier 
6*80ee5cbfSDavid du Colombier void
usage(void)7*80ee5cbfSDavid du Colombier usage(void)
8*80ee5cbfSDavid du Colombier {
9*80ee5cbfSDavid du Colombier 	fprint(2, "usage: rdwr [-w] file\n");
10*80ee5cbfSDavid du Colombier 	exits("usage");
11*80ee5cbfSDavid du Colombier }
12*80ee5cbfSDavid du Colombier 
13*80ee5cbfSDavid du Colombier void
main(int argc,char ** argv)14*80ee5cbfSDavid du Colombier main(int argc, char **argv)
15*80ee5cbfSDavid du Colombier {
16*80ee5cbfSDavid du Colombier 	int fd;
17*80ee5cbfSDavid du Colombier 	char buf[8192];
18*80ee5cbfSDavid du Colombier 	int n;
19*80ee5cbfSDavid du Colombier 
20*80ee5cbfSDavid du Colombier 	ARGBEGIN{
21*80ee5cbfSDavid du Colombier 	case 'w':
22*80ee5cbfSDavid du Colombier 		wrrd = 1;
23*80ee5cbfSDavid du Colombier 		break;
24*80ee5cbfSDavid du Colombier 	default:
25*80ee5cbfSDavid du Colombier 		usage();
26*80ee5cbfSDavid du Colombier 	}ARGEND;
27*80ee5cbfSDavid du Colombier 
28*80ee5cbfSDavid du Colombier 	if(argc != 1)
29*80ee5cbfSDavid du Colombier 		usage();
30*80ee5cbfSDavid du Colombier 
31*80ee5cbfSDavid du Colombier 	if((fd = open(argv[0], ORDWR)) < 0)
32*80ee5cbfSDavid du Colombier 		sysfatal("open: %r");
33*80ee5cbfSDavid du Colombier 
34*80ee5cbfSDavid du Colombier 	if(wrrd){
35*80ee5cbfSDavid du Colombier 		n = read(fd, buf, sizeof buf);
36*80ee5cbfSDavid du Colombier 		if(n < 0)
37*80ee5cbfSDavid du Colombier 			fprint(2, "read error: %r\n");
38*80ee5cbfSDavid du Colombier 		else{
39*80ee5cbfSDavid du Colombier 			write(1, buf, n);
40*80ee5cbfSDavid du Colombier 			print("\n");
41*80ee5cbfSDavid du Colombier 		}
42*80ee5cbfSDavid du Colombier 	}
43*80ee5cbfSDavid du Colombier 
44*80ee5cbfSDavid du Colombier 	while(print("> "), (n = read(0, buf, 1000)) > 0) {
45*80ee5cbfSDavid du Colombier 		seek(fd, 0, 0);
46*80ee5cbfSDavid du Colombier 		if(write(fd, buf, n-1) != n-1)	/* n-1: no newline */
47*80ee5cbfSDavid du Colombier 			fprint(2, "write error: %r\n");
48*80ee5cbfSDavid du Colombier 		seek(fd, 0, 0);
49*80ee5cbfSDavid du Colombier 		n = read(fd, buf, sizeof buf);
50*80ee5cbfSDavid du Colombier 		if(n < 0)
51*80ee5cbfSDavid du Colombier 			fprint(2, "read error: %r\n");
52*80ee5cbfSDavid du Colombier 		else{
53*80ee5cbfSDavid du Colombier 			write(1, buf, n);
54*80ee5cbfSDavid du Colombier 			print("\n");
55*80ee5cbfSDavid du Colombier 		}
56*80ee5cbfSDavid du Colombier 	}
57*80ee5cbfSDavid du Colombier }
58