kfscmd.c 1.1 KB

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