Тема: [pure C] Запис структури з вказівниками до файлу
Доброго дня!
Придумав собі наступну проблему.
struct CONFIG {
char *name;
int val;
char *password;
// char *c_test;
// int *i_test;
// double *d_test;
// ... і ще 100 вказівників
};
Наприклад маємо структуру, а в ній ~100 і більше полей, типу вказівника (по адресах знаходяться дані, які і потрібно записати/зчитати у файл). Ну, і якось не варіант 100 раз робити fread/fwrite, глупо це..
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MLC 20
struct CONFIG {
char *name;
int val;
char *password;
// char *c_test;
// int *i_test;
// double *d_test;
// ... і ще 100 вказівників
};
struct CONFIG *getCongif() {
struct CONFIG *sp = malloc(sizeof(struct CONFIG));
sp->name = strcpy(memset(malloc(MLC), 0, MLC), "root");
sp->val = 1488;
sp->password = strcpy(memset(malloc(MLC), 0, MLC), "qwerty");
return sp;
}
int main() {
// ------------------------------------------------------------------
struct CONFIG *s = getCongif();
FILE *fw, *fr;
fw = fopen("\\Release\\cfg.bin", "wb");
fwrite(s->name, MLC, 1, fw);
fwrite(&s->val, sizeof(int), 1, fw);
fwrite(s->password, MLC, 1, fw);
fclose(fw);
free(s->name);
free(s->password);
// ------------------------------------------------------------------
struct CONFIG *o = malloc(sizeof(struct CONFIG));
o->name = malloc(MLC);
o->password = malloc(MLC);
fr = fopen("\\Release\\cfg.bin", "rb");
fread(o->name, MLC, 1, fr);
fread(&o->val, sizeof(int), 1, fr);
fread(o->password, MLC, 1, fr);
printf("%s - %d - %s\n", o->name, o->val, o->password);
fclose(fr);
free(o->name);
free(o->password);
// ------------------------------------------------------------------
return 0;
}
Як елегантно можна вирішити це питання (аби одним махом обробити всю структуру)?