从FIFO读的信息有误:字节对齐 问题与解决
2012-02-19 22:04
232 查看
typedef enmu{
OT_UNKNOW = -1,
OT_ADD =0
}OTType;
typedef struct {
pid_t pid;
OTType OT;
}MessageClient;
typedef struct {
MessageClient MC;
char ResourceID[ID_SIZE];//ID_SIZE = 49
int result;
}ResultInfo;
sizeof(ResultInfo) = 64 =8 +49+4+3(padding)
MC 放于前面1-8个字节,ResourceID排在9-57个字节 , result 排在58-61, 62-64 是padding。
read(fd, &mc1, sizeof(MessageClient));//fine
read(fd, &resourceID1, sizeof(ID_SIZE));//fine
read(fd, &result1, sizeof(int));// NOT fine
最后一次读的有误。读出的不是传的1 or 0 。而是较大的数值。
估计是读取最后一次时,读的是58-61。但多次重复后,下一次重复读,从62位的padding数据开始读,导致后面的数据有误。
最终,封装多一层,解决了这个问题。
typedef struct {
char ResourceID[ID_SIZE];//ID_SIZE = 49
int result;
}Result ;
typedef struct {
MessageClient MC;
Result result;
}ResultInfo;
//封装Result
read(fd, &mc1, sizeof(MessageClient));//fine
read(fd, &result2, sizeof(Result));//fine
ref :
http://blog.csdn.net/zzffly9/article/details/1844421
OT_UNKNOW = -1,
OT_ADD =0
}OTType;
typedef struct {
pid_t pid;
OTType OT;
}MessageClient;
typedef struct {
MessageClient MC;
char ResourceID[ID_SIZE];//ID_SIZE = 49
int result;
}ResultInfo;
sizeof(ResultInfo) = 64 =8 +49+4+3(padding)
MC 放于前面1-8个字节,ResourceID排在9-57个字节 , result 排在58-61, 62-64 是padding。
read(fd, &mc1, sizeof(MessageClient));//fine
read(fd, &resourceID1, sizeof(ID_SIZE));//fine
read(fd, &result1, sizeof(int));// NOT fine
最后一次读的有误。读出的不是传的1 or 0 。而是较大的数值。
估计是读取最后一次时,读的是58-61。但多次重复后,下一次重复读,从62位的padding数据开始读,导致后面的数据有误。
最终,封装多一层,解决了这个问题。
typedef struct {
char ResourceID[ID_SIZE];//ID_SIZE = 49
int result;
}Result ;
typedef struct {
MessageClient MC;
Result result;
}ResultInfo;
//封装Result
read(fd, &mc1, sizeof(MessageClient));//fine
read(fd, &result2, sizeof(Result));//fine
ref :
http://blog.csdn.net/zzffly9/article/details/1844421
相关文章推荐
- 关于字节对齐-结构体对齐问题解决方法的确认
- C - 结构体字节对齐问题
- 蚂蚁分类信息系统5.8 解决后台管理员编辑信息时相关图片无法显示的问题
- 个人对C语言字节对齐问题的一些见解
- 解决问题:SQL Server对象资源管理器详细信息误删或消失后如何重新显示
- Linux下的 arm-linux-gcc 与 gcc 关于字节对齐问题
- 复选框单选框与文字对齐问题的研究与解决
- 解决登陆Centos系统时,系统提示locale warning 信息的问题
- 如何解决Visual Studio中“多字节字符集”(MBCS)支持问题
- silverlight webclient方式请求网页不包含cookie信息问题解决方法
- 详细解剖C++运算符sizeof()的使用及字节对齐问题
- c++内存中字节对齐问题详解
- 终于解决图片的exif信息在liunx下存储后乱码的问题
- 解决Eclipse中SVN版本信息不显示的问题
- stm32中字节对齐问题(__align(n),__packed用法)
- 解决Python查询Mysql数据库信息乱码问题
- Discuz! 6.1.0提示来路信息不正确问题的解决办法
- 解决《第一行代码》中百度定位信息问题
- 解决【windows下安装MySQL后,在服务找不到其相关信息】的问题
- 支持Android7.0 Signature V2 Scheme多渠道打包,并解决360加固获取不到渠道信息,渠道统计失败的问题