询问 msgrcv ,不适用于根据优先级接受消息
Posted
技术标签:
【中文标题】询问 msgrcv ,不适用于根据优先级接受消息【英文标题】:asking about msgrcv , does not work for accept messages accourding priority 【发布时间】:2016-07-24 23:18:03 【问题描述】:这是我的代码,在最后一部分中,msgrecv 不接受来自队列中的正确优先级的消息,例如:10 是最重要的接受然后 type=20 然后 type=30 ...这是我的目标就是以这种方式接受消息... 谁能告诉我问题出在哪里? 因为接受是没有优先权的.. 谢谢.. 那是代码
#include <sys/msg.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include "fifo.h"
typedef struct mymsg
long mtype;
char mtext[100];
int private;
mymsg;
int main()
int msqid;
mymsg msg,buff;
msqid=msgget(6000,IPC_CREAT|0666);
if(msqid==-1)
perror("FAiled to create message queue\n");
else
printf("Message queue id:%u\n",msqid);
//ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
int x=0 ;
while(1)
int privatefifo;
if(msgrcv(msqid,&buff,sizeof(msg)-sizeof(long),10,/*IPC_NOWAIT*/MSG_NOERROR | IPC_NOWAIT)>-1)
x=10;
else if(msgrcv(msqid,&buff,sizeof(msg)-sizeof(long),20,/*IPC_NOWAIT*/MSG_NOERROR | IPC_NOWAIT)>-1)
x=20;
else if(msgrcv(msqid,&buff,sizeof(msg)-sizeof(long),30,/*IPC_NOWAIT*/MSG_NOERROR | IPC_NOWAIT)>-1)
x=30;
printf("The message received is: %s , , from %d\n",buff.mtext,x);
strcpy(msg.mtext,"i replay you");
msg.mtype=buff.mtype;
if(msgsnd(buff.private,&msg,sizeof(msg)-sizeof(long),0)==-1)
perror("msgsnd failed:");
else
printf("Message sent successfully\n");
【问题讨论】:
请提供minimal reproducible example。我们至少需要看看发件人代码做了什么,您还需要解释您是如何得出“接受无优先权”的结论的。但是对于初学者,请注意msgrcv
没有“优先级”的概念。第四个参数不是优先级而是消息类型。所以你需要明确你的预期行为是什么,实际行为是什么。
【参考方案1】:
我修复了它,只是我必须在 x 的值处设置一个条件,以确保 3 个条件之一满足或没有..
【讨论】:
以上是关于询问 msgrcv ,不适用于根据优先级接受消息的主要内容,如果未能解决你的问题,请参考以下文章