gpt4 book ai didi

c - Ubuntu,POSIX mq_receive 在应该的时候没有阻塞

转载 作者:太空狗 更新时间:2023-10-29 16:13:15 25 4
gpt4 key购买 nike

我卡在了 POSIX 队列的起点:

(我认为)应该阻塞的东西根本没有阻塞,循环一直在旋转。我试图让一个进程在 mq_receive 上阻塞,直到一些消息到达,但看起来调用总是从队列中收到一条空消息(但还没有任何客户端发送消息)。使用 mq_flags=0 的默认设置正确打开队列。

我正在运行 Ubuntu 12.04。

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>

int main(int argc, char **argv) {
mqd_t qd;
qd = mq_open("/tempqueue", O_RDONLY | O_CREAT, 0666, NULL);
if (qd == (mqd_t) -1){
printf("Problemz");
return 1;
}else{
printf("Coda creata\n");
}

char buf[400];

while(1){
mq_receive(qd, buf, 400, NULL);
printf("Ricevo: %s.\n", buf);
}

mq_close(qd);
mq_unlink("/tempqueue");
}

最佳答案

检查返回值!

几乎可以肯定是“-1”……您可以在哪一点调用“perror()”或检查“errno”以查找潜在错误:

关于c - Ubuntu,POSIX mq_receive 在应该的时候没有阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com