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

时间:2012-05-18 06:42:12

标签: c unix ipc

我想要使用的队列上有许多消息(整数),我想跟踪使用整数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类型;我不确定那是否是吸烟枪。

1 个答案:

答案 0 :(得分:2)

您对msgrcv的来电无效。 size参数错误:

struct mymsg {
    long    mtype;     /* Message type. */
    char    mtext[1];  /* Message text. */
}
     

[...]    参数msgsz指定mtext 的字节大小

您应该传递msgbuf.mdata的大小,而不是整个结构的大小。这可以很好地覆盖message的末尾,并且可以将那些存储在那里的内容弄清楚。

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