История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
Нет не пойдёт, тогда запишется адрес на буфер, а не буфер. Если надо что-то не линейное. То проще последовательно записывать всё опция за опцией. Короче можно много как ибо Си, выше пример как кастовать структуру в массив, можно просто выделить массив нужного размера под всё, кастовать к нужному типу и записывать значения, потом просто массив записать в файл. Это решение в лоб, но оно часто (мне) удобнее так как всё получается пусть и длинно, но прото как топор. например
char * data = (char*)malloc(sizeof(uint32_t) + sizeof(uint64_t) + sizeof(uint8_t));
uint32_t * data32 = (uint32_t*)data;
*data32 = 65535;
uint64_t * data64 = (uint64_t*)(data+sizeof(uint32_t));
*data64 = 646841654;
uint8_t * data8 = (uint8_t*)(data+sizeof(uint32_t)+sizeof(uint64_t));
*data8 = 'Q';
//теперь в массиве data лежат три числа разного типа
//конечно можно писать гораздо короче, но я размазал так вроде понятнее что куда
//писал тут прям может где ошибся, но принцип думаю понятен
Но сам заголовок у тебя статичный, так что структурой пойдёт, а само сообщение никто не мешает записать после записи заголовка.
Чёт типа такого как то так :D
Исправление LINUX-ORG-RU, :
Нет не пойдёт, тогда запишется адрес на буфер, а не буфер. Если надо что-то не линейное. То проще последовательно записывать всё опция за опцией. Короче можно много как ибо Си, выше пример как кастовать структуру в массив, можно просто выделить массив нужного размера под всё, кастовать к нужному типу и записывать значения, потом просто массив записать в файл. Это решение в лоб, но оно часто (мне) удобнее так как всё получается пусть и длинно, но прото как топор. например
char * data = (char*)malloc(sizeof(uint32_t) + sizeof(uint64_t) + sizeof(uint8_t));
uint32_t * data32 = (uint32_t*)data;
*data32 = 65535;
uint64_t * data64 = (uint64_t*)(data+sizeof(uint32_t));
*data64 = 646841654;
uint8_t * data8 = (uint8_t*)(data+sizeof(uint32_t)+sizeof(uint64_t));
*data8 = 'Q';
//теперь в массиве data лежат три числа разного типа
//конечно можно писать гораздо короче, но я размазал так вроде понятнее что куда
//писал тут прям может где ошибся, но принцип думаю понятен
Но сам заголовок у тебя статичный, так что структурой пойдёт, а само сообщение никто не мешает записать после записи заголовка.
Чёт типа такого как то
Исходная версия LINUX-ORG-RU, :
Нет не пойдёт, тогда запишется адрес на буфер, а не буфер. Если надо что-то не линейное. То проще последовательно записывать всё опция за опцией. Короче можно много как ибо Си, выше пример как кастовать структуру в массив, можно просто выделить массив нужного размера под всё, кастовать к нужному типу и записывать значения, потом просто массив записать в файл. Это решение в лоб, но оно часто (мне) удобнее так как всё получается пусть и длинно, но прото как топор. например
char * data = (char*)malloc(sizeof(uint32_t) + sizeof(uint64_t) + sizeof(uint8_t));
uint32_t * data32 = (uint32_t*)data;
*data32 = 65535;
uint64_t * data64 = (uint64_t*)(data+sizeof(uint32_t));
*data64 = 646841654;
uint8_t * data8 = (uint8_t*)(data+sizeof(uint32_t)+sizeof(uint64_t));
*data8 = 'Q';
//теперь в массиве data лежат три числа разного типа
//конечно можно писать гораздо короче, но я размазал так вроде понятнее что куда
//писал тут прям может где ошибся, но принцип думаю понятен
Но сам заголовок у тебя статичный, так что структурой пойдёт, а само сообщение никто не мешает записать после записи заголовка.