write(fd,&a, sizeof(a));
неверно;по крайней мере, не переносимо, так как компилятор C может вводить отступ между элементами для обеспечения правильного выравнивания.sizeof(typedef struct a)
даже не имеет смысла.
Способ отправки данных зависит от спецификаций вашего протокола.В частности, протоколы определяют широко различные способы отправки строк.Как правило, наиболее безопасно отправлять struct
участников отдельно;или несколькими звонками, чтобы написать или writev(2)
.Например, чтобы отправить
struct { uint32_t a; uint16_t b; } foo;
по сети, где foo.a
и foo.b
уже имеют правильный порядковый номер, вы должны сделать что-то вроде:
struct iovec v[2];
v[0].iov_base = &foo.a;
v[0].iov_len = sizeof(uint32_t);
v[1].iov_base = &foo.b;
v[1].iov_len = sizeof(uint16_t);
writev(fp, v, 2);