rdwr.c 811 B

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