c - 消息队列中的输出被更改/截断

标签 c multithreading message-queue

我正在尝试掌握消息队列的窍门。由于某种原因,当显示我在控制台中输入的消息时,字符串有时会被截断或更改。有谁知道为什么会发生这种情况?

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);
        }
    }
}

最佳答案

我发现我的错误在于传递 struct msgbuf 的大小而不是 msgbuf.mtext 的大小。

 ret = msgrcv(msgId, mbr, sizeof(mbr->mtext), myId, MSG_NOERROR | IPC_NOWAIT);

关于c - 消息队列中的输出被更改/截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681711/

相关文章:

c# - 如何使用 Dispatcher 设置 Image.Source 属性?

redis - 为什么 Redis Pub/Sub 不允许在回调中访问 Redis?

c - 第二个线程无法通过 C/C++/linux 中线程 1 发送的消息队列接收消息

c++ - 调色板图像需要有效的调色板

c# - 事件处理程序与使用委托(delegate)

c - 如何退出Contiki代码?

multithreading - C中的posix pthreads

c - 确定窗口消息的优先级

c - 如何在C中正确打印变量?

c++ - 算法分析——预期增长率