Альтернативы освобожденному и fwrite для использования со структурированными данными

В книге, Начинающей Программирование Linux (3-й редактор), говорится

"Обратите внимание, что освободил, и fwrite не рекомендуются для использования со структурированными данными. Часть проблемы - то, что файлы, записанные с fwrite, являются потенциально непортативными между различными машинами".

Что это означает точно? Какие вызовы я должен использовать, если я хочу записать портативное средство чтения структурированных данных или устройство записи? Вызовы целевой системы?

5
задан ire_and_curses 28 March 2010 в 04:45
поделиться

1 ответ

Книга предостерегает от чтения блока байтов из файла непосредственно в структуру данных.

Проблема заключается в том, что между отдельными элементами структуры данных могут быть безымянные байты заполнения, а количество и положение этих байтов полностью зависят от реализации.

Вы по-прежнему можете использовать вызовы fread и fwrite для чтения и записи данных из файла и в файл, но вы должны читать и записывать каждый элемент структуры данных индивидуально, а не чем чтение или запись всей структуры сразу.

Есть и другие проблемы с переносимостью, о которых вы также должны помнить. Например, различные числовые типы имеют размеры, зависящие от реализации. Для переносимости можно использовать типы, определенные в заголовке stdint.h .

Также могут быть различия в представлении целых чисел с плавающей запятой и беззнаковых чисел, но в большинстве систем и форматов файлов теперь используется стандарт IEEE 754 и дополнение до двух, соответственно, поэтому проблемы совместимости с этими типами возникают гораздо реже. Просто убедитесь, что вы знаете, что говорят ваши спецификации.

3
ответ дан 15 December 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: