Когда вы говорите «прочитать и сохранить файл для каждой структуры», не могли бы вы прояснить этот вопрос?
Чтобы обеспечить правильное заполнение и порядковый номер, вам нужно сделать две вещи:
Отправка структуры по одному полю за раз. Это боль. Поскольку вы объявляете каждый член структуры как тип uint16_t
(и из этого семейства), sizeof () даст вам одинаковый ответ для всех платформ.
Чтобы обеспечить порядок байтов, вы должны использовать семейство порядка хост-сеть. См .: http://www.gnu.org/s/hello/manual/libc/Byte-Order.html
Когда вы делаете это, вы должны использовать htons()
(короткое замыкание между сетями) при отправке и затем ntohs()
(короткое замыкание между сетями) при получении. Для каждого члена вашей структуры.
Часто люди игнорируют это; если обе машины являются современными блоками Intel, что справедливо для подавляющего большинства из нас, вы можете получить код, который вы используете для отправки структур. Но, как вы упомянули, это не гарантирует гарантию и бесконечность!
Вы также можете использовать директивы # pragma pack () GNU для указания того, как следует обрабатывать заполнение. Это работает, если вы можете полагаться на набор инструментов GNU как для своего клиента, так и для сервера, поскольку это не является частью спецификации C.