我试图摆脱消息队列的困扰。由于某些原因,在显示我输入回控制台的消息时,字符串有时会被截断或更改。有谁知道为什么会这样?
void *readFromQueue() {
int ret;
mbr = malloc(sizeof(struct msgbuf)); // Allocate space to mbr.
while (TRUE) { // Forever...
ret = (int) msgrcv(msgId, mbr, sizeof(struct msgbuf), myId, MSG_NOERROR | IPC_NOWAIT); // Receive a message
if (ret == -1) { // Check for error.
//perror("Failed to receive message.");
} else {
printf("\t%160s", mbr->mtext);
}
}
}
最佳答案
我发现我的错误在于传递结构msgbuf的大小而不是msgbuf.mtext的大小。
ret = msgrcv(msgId, mbr, sizeof(mbr->mtext), myId, MSG_NOERROR | IPC_NOWAIT);