|
|
1.1 root 1: #include <sys/types.h>
2: #include <stat.h>
3:
4: /*
5: * transcribe [ - ] [ -delay ] file
6: * Bill Joy UCB May 1977
7: *
8: * watch a file and copy it out
9: * as it grows. default interval for
10: * copying is 15 seconds.
11: * option - suppresses complete file from being copied out
12: * and only gives new stuff.
13: */
14: struct stat stbuf;
15: char buf[512];
16: int i;
17: off_t offset;
18: int interval 15;
19: int timeleft 32000;
20: char *progname;
21: int whole 1;
22:
23: main(argc, argv)
24: int argc;
25: char *argv[];
26: {
27: progname = *argv++;
28: argc--;
29: nxtarg:
30: if (argc > 1 && argv[0][0] == '-' && argv[0][1] == 0) {
31: argc--;
32: argv++;
33: whole = 0;
34: goto nxtarg;
35: }
36: if (argc > 1 && argv[0][0] == '+') {
37: timeleft = getdel(argv[0] + 1);
38: argc--;
39: argv++;
40: goto nxtarg;
41: }
42: if (argc > 1 && argv[0][0] == '-') {
43: interval = getdel(argv[0] + 1);
44: argv++;
45: argc--;
46: goto nxtarg;
47: }
48: if (argc != 1) {
49: printf("Usage: %s [ - ] [ -interval ] file\n", progname);
50: exit(1);
51: }
52: if (interval <= 0) {
53: printf("Unreasonable interval\n");
54: exit(1);
55: }
56: close(0);
57: if (open(argv[0], 0) < 0) {
58: perror(argv[0]);
59: exit(1);
60: }
61: if (whole == 0) {
62: fstat(0, &stbuf);
63: offset = stbuf.st_size;
64: }
65: do {
66: fstat(0, &stbuf);
67: if (stbuf.st_size > offset) {
68: lseek(0, (long) offset, 0);
69: while ((i = read(0, buf, sizeof buf)) > 0) {
70: offset =+ i;
71: write(1, buf, i);
72: }
73: }
74: sleep(interval);
75: timeleft =- interval;
76: } while (timeleft > 0);
77: }
78:
79: getdel(cp)
80: char *cp;
81: {
82: register int j;
83:
84: j = 0;
85: do {
86: number(*cp);
87: j = j * 10 + *cp++ - '0';
88: } while (*cp);
89: return (j);
90: }
91:
92: number(c)
93: char c;
94: {
95: if (c < '0' || c > '9') {
96: printf("Bad number for interval\n");
97: exit(1);
98: }
99: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.