【发布时间】:2016-08-09 11:12:14
【问题描述】:
我正在尝试掌握消息队列的窍门。出于某种原因,当显示我输入回控制台的消息时,字符串有时会被截断或更改。有谁知道为什么会发生这种情况?
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);
}
}
}
【问题讨论】:
-
是
char mtext[1];char mtext[160];的错字吗? -
@Bob__ 我进行了更改,但仍然出现奇怪的错误。
-
mtype应该是long,而不是int。见pubs.opengroup.org/onlinepubs/7908799/xsh/msgrcv.html 和man7.org/linux/man-pages/man2/msgsnd.2.html -
@AndrewHenle 这解决了我正在解决的另一个错误,谢谢。
标签: c multithreading message-queue