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:
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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>