зависит от способа заполнения структуры.если структура имеет фиксированный размер (то есть она не содержит динамически размещаемого указателя) и является автономной (она не содержит указателей на память вне самой структуры), то вы можете вывести структуру непосредственно в файл, используя стандартныйработа с файлом библиотеки.что-то по этому пути:
#include <stdio.h>
FILE *file;
file = fopen( "filename", "w" );
fwrite( &your_struct, sizeof(your_struct), 1, file )
fclose( file );
(примечание: проверка ошибок опущена для ясности и краткости)
перезагрузка выглядит примерно так:
file = fopen( "filename", "r" );
fread( &your_struct, sizeof(your_struct), 1, file );
fclose( file );
этот метод будет работать на всех платформах.
однако этот метод не является строго кроссплатформенным, поскольку результирующий файл не может быть перенесен между машинами с различным порядком байтов (например, старые Macintosh'ы использовали для хранения байтов, составляющих int, в другом порядке, чемкомпьютер IBM);Полученный файл может использоваться только на платформах той же архитектуры, что и компьютер, на котором был создан файл.
теперь, если структура не является автономной (содержит указатель, ссылающийся на память вне структуры) или использует динамическивыделенной памяти, тогда вам понадобится что-то более сложное ...
относительно проблемы с порядком байтов, стандартная реализация сокета BSD, которая существует почти на каждой платформе, определяет набор функций для преобразования из порядок сетевых байтов до порядок байтов хоста (и их обратный), что очень удобно, поскольку порядок байтов в сети строго кроссплатформенный.взгляните на htons()
и ntohs()
, htonl()
и ntohl()
.к сожалению, вы должны вызывать эти функции для каждого поля структуры, что довольно громоздко, если структура большая.