Запись\считывание структуры из файла

Рейтинг: 0Ответов: 1Опубликовано: 25.03.2015

Подскажите, у меня имеется структура такого вида:

struct Item{
 int key;
 int release;
 char *info;
};

Как я могу ее записать в двоичный файл, а потом считать из файла?

В задании есть доп. требования: чтение и запись выполнять через fread() и fwrite(), в которых должна быть указана реальная длина информации. Что может подразумеваться под длинной информации?

Ответы

▲ 2Принят

Одним вызовом fread/fwrite, пожалуй не удастся, а парочкой можно.

 int write_str (Item *ps, FILE *f) { 
   struct Item s = *ps;  // не хочу менять оригинал (tread/signal safe?)
   char *t = s.info;
   int ls = (*((long *)(&s.info)) = strlen(t)), // тут запишем длину строки
       l = fwrite(&s, 1, sizeof(s), f),
       l2 = fwrite(t, 1, ls, f);

   return (l == sizeof(s) && l2 == ls) ? l + ls : -1;
 }

ну, а read аналогично -- 2 fread + strdup

   fread(&s, 1, sizeof(s), f);
   int l = *((long *)(&s.info));
   char *t[l + 1];
   ...

места мало