我想要使用的队列上有许多消息(整数),我想跟踪使用整数int consumed
消耗的消息数量。
我首先使用ds.msg_qnum > 0
检测队列是否有消息,其中ds是struct msqid_ds的对象。如果有消息,那么我调用msgrcv消耗消息并增加消耗的计数器。
所以我有这个:
msgrcv(msgqid, (void *) &message, sizeof(message), 1, 0)
printf("consumed before incr: %d\n", consumed);
consumed++;
消耗在每次消息消耗后显示为相同的随机整数值。另外,我将消息结构设置为将消息数据保存为int类型;我不确定那是否是吸烟枪。
答案 0 :(得分:2)
您对msgrcv
的来电无效。 size参数错误:
struct mymsg { long mtype; /* Message type. */ char mtext[1]; /* Message text. */ }
[...] 参数msgsz指定mtext 的字节大小。
您应该传递msgbuf.mdata
的大小,而不是整个结构的大小。这可以很好地覆盖message
的末尾,并且可以将那些存储在那里的内容弄清楚。
(确保在调用message.mtype
之前初始化msgrcv
。)