我有这些结构包含一些GPS数据:
typedef struct Traw_dat {
int32_t iTOW;
int16_t week;
double cpMes;
double prMes;
double doMes;
int8_t mesQI;
int8_t cno;
uint8_t lli;
}raw_dat;
typedef struct Tmsg_dat{
char syncw[8];
uint32_t msg_id;
raw_dat raw[32];
// struct eph_dat eph[32];
char nmea[2][128];
}msg_dat;
我必须通过管道将我的程序中的msg_dat结构通过管道发送到八度音程中的某个程序,然后用它进行一些计算。
我认为那很简单
msg_dat tab;
....
int check = write(pipe_fd,tab,sizeof(msg_dat));
可以做到这一点,但我的同事告诉我,C中的结构不能保证其物品的正确性和顺序。这是真的吗?
如果是的话,这个糟糕的事情是正确的,怎么做?
//output_fd - pipe, should check if writes are correct
write(output_fd,tab->syncw,8);
write(output_fd,&(tab->msg_id++),4);
for (int i = 0; i < 32 ; i++ ){
write(output_fd,&(tab->raw[i].iTOW),4);
write(output_fd,&(tab->raw[i].week),2);
write(output_fd,&(tab->raw[i].cpMes),8);
write(output_fd,&(tab->raw[i].proMes),8);
write(output_fd,&(tab->raw[i].doMes),8);
write(output_fd,&(tab->raw[i].mewQI),1);
write(output_fd,&(tab->raw[i].cno),1);
write(output_fd,&(tab->raw[i].lli),1);
}
// for(int i = 0; i < 32 ; i++){
// write(ephdat->......
// }
write(output_fd,&(tab->nmea[0],128);
write(output_fd,&(tab->nmea[1],128);
编辑:这个问题只有原来的一半,还有第二部分,没有在那里回答......