有关linux msgsnd()疑问求助
各位大侠,我在linux 3.2上写代码,用到了消息队列函数msgsnd(),发现一个奇怪问题。问题描述如下:
1.样例代码如下:
int32_t dwRet = 0;
uint8_t ucTest[20] = {1,2,3,4};
DMOMsg *pstMsg = (DMOMsg *)ucTest;
pstMsg ->udwMsgID = SCOM_MSG_RX; //此行代码会导致发送失败
dwRet = msgsnd(mq_id, ucTest, 20, IPC_NOWAIT);
// printf("snd ret %d,errno:%d\n",dwRet,errno);
如上代码,我如果调用了一次: pstMsg ->udwMsgID = SCOM_MSG_RX 这行代码,会导致下面的msgsnd()函数失败,此时查看errno,错误码是22,也就是无效的参数。但是我如果不调用这一行代码,发送消息就会正确,我在其他地方可以正确读出消息队列里的消息{1,2,3,4}这串数据。
为什么会这样呢?我只是简单的执行了一条: pstMsg ->udwMsgID = SCOM_MSG_RX 代码,理论上只是对ucTest[]数组进行了一次赋值操作而已,就会导致后面的msgsnd()失败呢?
百思不得其解,还望大侠指点一下。多谢!