Надо мне сохранить некие данные, а позже прочитать их той же программой.
struct data *data;
write (f, data, size_of_data);
...
read (f, data, size_of_data);
Если кто-то не знает, что так делать нельзя, сообщаю - так делать нельзя. Если кто-то захочет сообщить в этой теме, что так делать нельзя, то не надо - это оффтоп, заводите свои темы.
Я хочу поговорить, как так сделать!
Чтобы успешно прочесть такие данные, потребуется заголовок с метаданными (описание структуры, как она представляется в оперативной памяти) и десериализатор, который по метаданным декодирует данные в случае несовпадения представления данных в памяти записавшего с прочитавшим.
current = meta_current ();
write (f, current, size_of_meta (current));
...
meta = meta_read (f);
read (f, data, size_of_data (current));
if (!meta_eq (meta, current)) meta_decode (meta, data);
Что нужно предусмотреть в этом случае?
- указатели относительные
- порядок байт
- размер элементарных типов данных
- смещение всех элементов структуры
- как узнать определить два предыдущих пункта не компилируя и не запуская тест
- текстовое описание структуры или его хэш
Что еще?
Числа с плавающей точкой мне не надо, но послушать про них будет интересно.
Магией в meta_decode и вопросом, кто будет писать эту функцию можно пренебречь.