Я понимаю, что переносимость не является проблемой, так как вы работаете для встроенной системы.В другом случае вам следует использовать что-то вроде XML.
Вы можете преобразовать свой код обратно в:
struct d_object {
int flags;
int time;
int offset;
char * filename;
};
, а затем сохранить каждый фрагмент данных индивидуально:
write( fd, &record.flags, sizeof( int ) );
write( fd, &record.time, sizeof( int ) );
write( fd, &record.offset, sizeof( int ) );
int filename_length = strlen( filename );
write( fd, &filename_length, sizeof( int ) );
write( fd, record.filename, filename_length );
Для чтения вам придется читать каждый элемент отдельно, а затем имя файла:
int filename_length;
read( fd, &emptyRecord.flags, sizeof( int ) );
read( fd, &emptyRecord.time, sizeof( int ) );
read( fd, &emptyRecord.offset, sizeof( int ) );
read( filename_length, sizeof( int ), 1, file );
emptyRecord.filename = (char *) malloc( sizeof( char ) * ( filename_length +1) );
read( fd, emptyRecord.filename, filename_length );
*( emptyRecord.filename + filename_length ) = 0;