extract.c 856 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. int main(int argc, char **argv){
  13. FILE *f;
  14. char *zBuf;
  15. int ofst;
  16. int n;
  17. size_t got;
  18. if( argc!=4 ){
  19. fprintf(stderr, "Usage: %s FILENAME OFFSET AMOUNT\n", *argv);
  20. return 1;
  21. }
  22. f = fopen(argv[1], "rb");
  23. if( f==0 ){
  24. fprintf(stderr, "cannot open \"%s\"\n", argv[1]);
  25. return 1;
  26. }
  27. ofst = atoi(argv[2]);
  28. n = atoi(argv[3]);
  29. zBuf = malloc( n );
  30. if( zBuf==0 ){
  31. fprintf(stderr, "out of memory\n");
  32. return 1;
  33. }
  34. fseek(f, ofst, SEEK_SET);
  35. got = fread(zBuf, 1, n, f);
  36. fclose(f);
  37. if( got<n ){
  38. fprintf(stderr, "got only %d of %d bytes\n", got, n);
  39. return 1;
  40. }else{
  41. fwrite(zBuf, 1, n, stdout);
  42. }
  43. return 0;
  44. }