在我想要消费的队列上有许多消息(它们是整数),并且我想使用整数int consumed来跟踪我消费了多少消息。
我首先使用ds.msg_qnum > 0检测队列是否有消息,其中ds是结构msqid_ds的对象。如果有消息,那么我调用msgrcv来消费消息并递增已消费计数器。
所以我有这样的想法:
msgrcv(msgqid, (void *) &message, sizeof(message), 1, 0)
printf("consumed before incr: %d\n", consumed);
consumed++;并且在每次消息消费之后,消费显示为相同的随机整数值。此外,我将消息结构设置为将消息数据保存为int类型;我不确定这是否是确凿的证据。
发布于 2012-05-18 15:10:52
您对msgrcv的调用无效。size参数错误:
结构mymsg { long mtype;/*消息类型。*/ char mtext1;/*消息文本。*/ }
..。参数msgsz以字节为单位指定多行文字的大小。
您应该传递msgbuf.mdata的大小,而不是整个结构的大小。这将很好地覆盖message末尾之后的内容,并破坏存储在那里的所有内容。
(确保在调用msgrcv之前也初始化了message.mtype。)
https://stackoverflow.com/questions/10647909
复制相似问题