Linux 字节对齐问题

今天写一个小程序,需要使用msg在两个不同程序间进行通信;

两个程序中msg的文本结构体都是一样的,直接复制过去的,结果运行的时候出现错误:msgrcv: Argument list too long

这个错误的原因是 msgrcv 中的参数msglen 小于消息队列里要读取的msg的长度;

msg的结构体是直接复制的,怎么会出现这样的问题,只好用sizeof打印一下,结果两变的大小还真不一样;

这样就考虑是字节对齐的问题,msgrcv这边的程序使用了#pragma pack(4),而msgsnd这边没有;

所以在msgsnd 这边加上 #pragma pack(4),问题解决;


由此可见,最好在写程序的时候一开始就要定义好字节对齐,以免出现这种看起来没有问题,但确实有问题的情况;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值