C - 结构是否保证连续性?

时间:2016-04-01 16:57:00

标签: c pipe structure

我有这些结构包含一些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);

编辑:这个问题只有原来的一半,还有第二部分,没有在那里回答......

0 个答案:

没有答案