10 line(int fd, char *file)
21 fprint(2, "read: error reading %s: %r\n", file);
31 buf = realloc(buf, nalloc);
33 fprint(2, "read: malloc error: %r\n");
48 lines(int fd, char *file)
51 if(line(fd, file) == 0)
53 }while(multi || --nlines>0);
57 chars(int fd, char *file)
63 for(m = 0; m < nchars; m += n){
67 if((n = read(fd, buf, n)) < 0){
68 fprint(2, "read: error reading %s: %r\n", file);
83 fprint(2, "usage: read [-m] [-n nlines] [-c nbytes] [files...]\n");
88 main(int argc, char *argv[])
90 void (*proc)(int, char*);
96 nchars = atoll(EARGF(usage()));
100 nlines = atoi(EARGF(usage()));
110 (*proc)(0, "<stdin>");
112 for(i=0; i<argc; i++){
113 fd = open(argv[i], OREAD);
115 fprint(2, "read: can't open %s: %r\n", argv[i]);
118 (*proc)(fd, argv[i]);