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