我的 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/