1

我要使用的队列中有许多消息(整数),我想使用整数跟踪我使用的消息数int consumed

ds.msg_qnum > 0我首先使用where ds 是 struct msqid_ds 的对象来检测队列是否有消息。如果有消息,那么我调用 msgrcv 来使用消息并增加使用的计数器。

所以我有这个:

msgrcv(msgqid, (void *) &message, sizeof(message), 1, 0)
printf("consumed before incr: %d\n", consumed);
consumed++;

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

4

1 回答 1

3

您的来电msgrcv无效。尺寸参数错误:

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

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

您应该传递 的大小msgbuf.mdata,而不是整个结构的大小。这很可能会覆盖过去的结尾,message并弄乱存储在那里的任何内容。

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

于 2012-05-18T07:10:52.357 回答