Ukážu radši celý program, co zatím mám. Načítám data z velkého binárního souboru, který je řešen jako spoják. Já chci jednotlivé bloky ukládat do samostatných souborů
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef struct {
char signature[8];
uint32_t block_type;
uint32_t block_size;
uint32_t next;
} Block;
int main(int argc, char const * argv[]) {
char name[3 * 9];
if (argc != 2) {
fprintf(stderr, "usage: %s <map>", argv[0]);
return 1;
}
FILE * input = fopen(argv[1], "rb");
while (1) {
Block b;
fread(&b, sizeof(b), 1, input);
b.signature[7] = '\0';
if (b.block_type == 0x8000)
break;
sprintf(name, "%s %04x %04x", b.signature, b.block_type, b.block_size);
FILE * output = fopen(name, "wb");
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
char * buffer = malloc(b.block_size);
fread(buffer, 1, b.block_size, input);
fwrite(buffer, 1, b.block_size, output);
free(buffer);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
fclose(output);
}
fclose(input);
return 0;
}
Kód, který mě zajímá, jestli je takhle optimální je mezi těmi vlnovkami...