comparison src/usr/wc.c @ 0:83c23a36980d

Init
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Fri, 26 May 2017 23:11:05 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:83c23a36980d
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 }