wc.c 820 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "types.h"
  2. #include "stat.h"
  3. #include "user.h"
  4. char buf[512];
  5. void
  6. wc(int fd, char *name)
  7. {
  8. int i, n;
  9. int l, w, c, inword;
  10. l = w = c = 0;
  11. inword = 0;
  12. while((n = read(fd, buf, sizeof(buf))) > 0){
  13. for(i=0; i<n; i++){
  14. c++;
  15. if(buf[i] == '\n')
  16. l++;
  17. if(strchr(" \r\t\n\v", buf[i]))
  18. inword = 0;
  19. else if(!inword){
  20. w++;
  21. inword = 1;
  22. }
  23. }
  24. }
  25. if(n < 0){
  26. printf(1, "wc: read error\n");
  27. exit();
  28. }
  29. printf(1, "%d %d %d %s\n", l, w, c, name);
  30. }
  31. int
  32. main(int argc, char *argv[])
  33. {
  34. int fd, i;
  35. if(argc <= 1){
  36. wc(0, "");
  37. exit();
  38. }
  39. for(i = 1; i < argc; i++){
  40. if((fd = open(argv[i], 0)) < 0){
  41. printf(1, "wc: cannot open %s\n", argv[i]);
  42. exit();
  43. }
  44. wc(fd, argv[i]);
  45. close(fd);
  46. }
  47. exit();
  48. }