fwrite
и fread
достаточно переносимы, но у вас будут проблемы с такими вещами, как sizeof(double)
, которые могут различаться в разных системах. Убедитесь, что каждое двоичное поле, которое вы пишете, имеет определенный размер, который не зависит от компилятора или ОС - вы можете в значительной степени выполнить это, используя типы, которые явно задают их размер, например uint32_t
.
Вам также нужно беспокоиться о порядке байтов, но есть макросы ntoh
, ntohl
, hton
и htonl
, которые вы можете использовать для замены порядка байтов, и они должны быть определены для правильной в какой бы системе вы их не компилировали.