【发布时间】:2017-10-17 13:29:07
【问题描述】:
所以我一直在这样做一整天,并没有弄明白。我需要检查是否有空消息传递给接收方或服务器,然后取消链接队列。 这就是我所拥有的:
while((c=getopt(argc, argv, ":q:"))!=-1){
switch(c){
case 'q':
q = 1;
Q = optarg;
break;
}
}
int oprimek_vrsta = -1;
char *msg = malloc(maxmsg_len + 1);
if(q != 0){
oprimek_vrsta = mq_open(Q, O_RDWR|O_CREAT|O_EXCL, 0660, &lastnosti_vrste);
if(oprimek_vrsta == -1){
perror("error creating queue");
return -1;
}
if(mq_getattr(oprimek_vrsta, &lastnosti_vrste) == -1){
perror("error reading attributes");
return -1;
}
while(loop){
memset(msg, 0, 4096);
munmap(msg, 4096);
msg_len = mq_receive(oprimek_vrsta, msg, maxmsg_len, &priority);
if(msg_len == -1){
perror("error reading message");
loop = 0;
free(msg);
mq_close(oprimek_vrsta);
mq_unlink(Q);
return -1;
}else{
write(1, msg, strlen(msg));
}
}
}
【问题讨论】:
-
如果消息为空,您不会收到
msg_len == 0吗? -
您要检查队列是否为空,或者收到的消息是否为空?
-
我没有得到 0,由于某种原因它是 1,但是如果我输入 1,即使我发送一些东西它也会中断。 @alk 我认为两者都会起作用
-
如果
mq_receive()返回 1,那么你收到的那一个字节的值是多少? -
发送时显示为 0
标签: c linux posix message-queue mq