1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 5 char *argv0; 6 7 int 8 openlog(char *name) 9 { 10 int fd; 11 12 fd = open(name, OWRITE); 13 if(fd < 0) 14 fd = create(name, OWRITE, DMAPPEND|0666); 15 if(fd < 0){ 16 fprint(2, "%s: can't open %s: %r\n", argv0, name); 17 return -1; 18 } 19 seek(fd, 0, 2); 20 return fd; 21 } 22 23 void 24 main(int argc, char **argv) 25 { 26 Biobuf in; 27 int fd; 28 char *p, *t; 29 char buf[8192]; 30 31 argv0 = argv[0]; 32 if(argc < 3){ 33 fprint(2, "usage: %s console logfile \n", argv0); 34 exits("usage"); 35 } 36 37 fd = open(argv[1], OREAD); 38 if(fd < 0){ 39 fprint(2, "%s: can't open %s: %r\n", argv0, argv[1]); 40 exits("open"); 41 } 42 Binit(&in, fd, OREAD); 43 44 fd = openlog(argv[2]); 45 46 for(;;){ 47 if(p = Brdline(&in, '\n')){ 48 p[Blinelen(&in)-1] = 0; 49 t = ctime(time(0)); 50 t[19] = 0; 51 if(fprint(fd, "%s: %s\n", t, p) < 0){ 52 close(fd); 53 fd = openlog(argv[2]); 54 fprint(fd, "%s: %s\n", t, p); 55 } 56 } else if(Blinelen(&in) == 0) // true eof 57 break; 58 else { 59 Bread(&in, buf, sizeof buf); 60 } 61 } 62 exits(0); 63 } 64