commit
776dd74325
@ -0,0 +1,4 @@ |
|||||||
|
.idea/ |
||||||
|
*.o |
||||||
|
bsplit |
||||||
|
|
@ -0,0 +1,48 @@ |
|||||||
|
#include <stdio.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <errno.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#define MAX(a,b) ((a)>(b)?(a):(b)) |
||||||
|
#define MIN(a,b) ((a)<(b)?(a):(b)) |
||||||
|
|
||||||
|
int main(int argc, char *argv[]) { |
||||||
|
for (int i = 1; i < argc; i++) { |
||||||
|
if (0==strcmp(argv[i], "-h") || 0==strcmp(argv[i], "--help")) { |
||||||
|
fprintf(stderr, "binary split\nArguments: file start end\nStart and end are byte indexes. End is optional\n"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (argc < 3) { |
||||||
|
fprintf(stderr, "Bad argc\n"); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
size_t pos = atol(argv[2]); |
||||||
|
|
||||||
|
size_t take = argc==4?atol(argv[3]):0; |
||||||
|
|
||||||
|
FILE * f = fopen(argv[1], "rb");
|
||||||
|
fseek(f, pos, SEEK_SET); |
||||||
|
|
||||||
|
#define CHUNKSZ 8192 |
||||||
|
|
||||||
|
unsigned char chunk[CHUNKSZ]; |
||||||
|
|
||||||
|
while (1) { |
||||||
|
size_t maxtake = take==0?CHUNKSZ : MIN(take, CHUNKSZ); |
||||||
|
size_t len = fread(chunk, 1, maxtake, f); |
||||||
|
if (errno != 0 || len == 0) { |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
fwrite(chunk, 1, len, stdout); |
||||||
|
|
||||||
|
if (take > 0) { |
||||||
|
take -= len; |
||||||
|
if (take == 0) break; |
||||||
|
} |
||||||
|
}
|
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
Loading…
Reference in new issue