1 #include <u.h>
2 #include <libc.h>
3
4 void
main(int argc,char * argv[])5 main(int argc, char *argv[])
6 {
7 char *name, buf[4*1024];
8 int fd, n, i, errs;
9
10 name = 0;
11 ARGBEGIN{
12 case 'n':
13 name = ARGF();
14 break;
15 default:
16 fprint(2, "usage: kfscmd [-n server] commands\n");
17 exits("usage");
18 }ARGEND
19
20 if(name)
21 snprint(buf, sizeof buf, "/srv/kfs.%s.cmd", name);
22 else
23 strcpy(buf, "/srv/kfs.cmd");
24 fd = open(buf, ORDWR);
25 if(fd < 0){
26 fprint(2, "kfscmd: can't open commands file\n");
27 exits("commands file");
28 }
29
30 errs = 0;
31 for(i = 0; i < argc; i++){
32 if(write(fd, argv[i], strlen(argv[i])) != strlen(argv[i])){
33 fprint(2, "%s: error writing %s: %r", argv0, argv[i]);
34 errs++;
35 continue;
36 }
37 for(;;){
38 n = read(fd, buf, sizeof buf - 1);
39 if(n < 0){
40 fprint(2, "%s: error executing %s: %r", argv0, argv[i]);
41 errs++;
42 break;
43 }
44 buf[n] = '\0';
45 if(strcmp(buf, "done") == 0 || strcmp(buf, "success") == 0)
46 break;
47 if(strcmp(buf, "unknown command") == 0){
48 errs++;
49 print("kfscmd: command %s not recognized\n", argv[i]);
50 break;
51 }
52 write(1, buf, n);
53 }
54 }
55 exits(errs ? "errors" : 0);
56 }
57