Книга предостерегает от чтения блока байтов из файла непосредственно в структуру данных.
Проблема в том, что между отдельными элементами структуры данных могут быть безымянные байты заполнения, а количество и позиция этих байтов полностью зависят от реализации.
Вы все еще можете использовать вызовы fread
и fwrite
для чтения и записи данных из файла и в файл, но вы должны читать и записывать каждый элемент структуры данных по отдельности, а не читать или записывать всю структуру в один раз.
Есть и другие проблемы с переносимостью, о которых вы также должны помнить. Например, различные числовые типы имеют зависящие от реализации размеры. Для переносимости вы можете использовать типы, определенные в заголовке stdint.h
.
Могут также быть различия в представлении целых чисел с плавающей запятой и целых без знака, но большинство систем и форматов файлов теперь используют IEEE 754 и два дополнения соответственно, поэтому проблемы совместимости с этими типами встречаются гораздо реже. Просто убедитесь, что вы знаете, что говорят ваши спецификации.