user/wc.c
55 lines
1#include "kernel/types.h"2#include "kernel/stat.h"3#include "kernel/fcntl.h"4#include "user/user.h"56char buf[512];78void9wc(int fd, char *name)10{11 int i, n;12 int l, w, c, inword;1314 l = w = c = 0;15 inword = 0;16 while((n = read(fd, buf, sizeof(buf))) > 0){17 for(i=0; i<n; i++){18 c++;19 if(buf[i] == '\n')20 l++;21 if(strchr(" \r\t\n\v", buf[i]))22 inword = 0;23 else if(!inword){24 w++;25 inword = 1;26 }27 }28 }29 if(n < 0){30 printf("wc: read error\n");31 exit(1);32 }33 printf("%d %d %d %s\n", l, w, c, name);34}3536int37main(int argc, char *argv[])38{39 int fd, i;4041 if(argc <= 1){42 wc(0, "");43 exit(0);44 }4546 for(i = 1; i < argc; i++){47 if((fd = open(argv[i], O_RDONLY)) < 0){48 printf("wc: cannot open %s\n", argv[i]);49 exit(1);50 }51 wc(fd, argv[i]);52 close(fd);53 }54 exit(0);55}56