首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >整数在msgrcv之后设置为随机值

整数在msgrcv之后设置为随机值
EN

Stack Overflow用户
提问于 2012-05-18 14:42:12
回答 1查看 412关注 0票数 1

在我想要消费的队列上有许多消息(它们是整数),并且我想使用整数int consumed来跟踪我消费了多少消息。

我首先使用ds.msg_qnum > 0检测队列是否有消息,其中ds是结构msqid_ds的对象。如果有消息,那么我调用msgrcv来消费消息并递增已消费计数器。

所以我有这样的想法:

代码语言:javascript
复制
msgrcv(msgqid, (void *) &message, sizeof(message), 1, 0)
printf("consumed before incr: %d\n", consumed);
consumed++;

并且在每次消息消费之后,消费显示为相同的随机整数值。此外,我将消息结构设置为将消息数据保存为int类型;我不确定这是否是确凿的证据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-18 15:10:52

您对msgrcv的调用无效。size参数错误:

结构mymsg { long mtype;/*消息类型。*/ char mtext1;/*消息文本。*/ }

..。参数msgsz以字节为单位指定多行文字的大小。

您应该传递msgbuf.mdata的大小,而不是整个结构的大小。这将很好地覆盖message末尾之后的内容,并破坏存储在那里的所有内容。

(确保在调用msgrcv之前也初始化了message.mtype。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10647909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档