1 /*
2 ** Extract a range of bytes from a file.
3 **
4 ** Usage:
5 **
6 ** extract FILENAME OFFSET AMOUNT
7 **
8 ** The bytes are written to standard output.
9 */
10 #include <stdio.h>
11 #include <stdlib.h>
12
main(int argc,char ** argv)13 int main(int argc, char **argv){
14 FILE *f;
15 char *zBuf;
16 int ofst;
17 int n;
18 size_t got;
19
20 if( argc!=4 ){
21 fprintf(stderr, "Usage: %s FILENAME OFFSET AMOUNT\n", *argv);
22 return 1;
23 }
24 f = fopen(argv[1], "rb");
25 if( f==0 ){
26 fprintf(stderr, "cannot open \"%s\"\n", argv[1]);
27 return 1;
28 }
29 ofst = atoi(argv[2]);
30 n = atoi(argv[3]);
31 zBuf = malloc( n );
32 if( zBuf==0 ){
33 fprintf(stderr, "out of memory\n");
34 return 1;
35 }
36 fseek(f, ofst, SEEK_SET);
37 got = fread(zBuf, 1, n, f);
38 fclose(f);
39 if( got<n ){
40 fprintf(stderr, "got only %d of %d bytes\n", got, n);
41 return 1;
42 }else{
43 fwrite(zBuf, 1, n, stdout);
44 }
45 return 0;
46 }
47