|
|
1.1 root 1: #include <stdio.h>
2:
3: extern long atol();
4: void fatal();
5:
6: main(argc, argv)
7: int argc; char *argv[];
8: {
9: register FILE *ifp;
10: register int c;
11: long nchars, size;
12:
13: if (argc < 2 || argc > 3)
14: fatal("Usage: fseek file [ nchars ]");
15: nchars = (argc == 3) ? atol(argv[2]) : 100L;
16: if ((ifp = fopen(argv[1], "r")) == NULL)
17: fatal("cannot open input file");
18: /* Seek to end */
19: if (fseek(ifp, 0L, 2) == -1)
20: fatal("seek error");
21: /* Find current size */
22: size = ftell(ifp);
23: size = (size < nchars) ? 0L : size - nchars;
24:
25: /* Seek to point */
26: if (fseek(ifp, size, 0) == -1)
27: fatal("seek error");
28: while ((c = getc(ifp)) != EOF)
29: /* Copy rest to stdout */
30: putchar(c);
31: if (fclose(ifp) == EOF)
32: fatal("cannot close");
33: exit(0);
34: }
35:
36: void fatal(message)
37: char *message;
38: {
39: fprintf(stderr, "fseek: %s\n", message);
40: exit(1);
41: }
42:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.