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