-1
這是我的代碼,並在最後一部分,msgrecv不接受隊列消息accourding正確preient,例如:10是最重要的接受然後鍵入= 20然後鍵入= 30 ...這是我的目標是以這種方式接受消息... 任何人都可以告訴我問題在哪裏? 因爲驗收是accoures沒有優先級.. 謝謝.. 即代碼詢問有關msgrcv,不適用於接受消息accourding優先
#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");
}
}
}
請提供[mcve]。我們至少需要了解發件人代碼的作用,並且還需要解釋您是如何得出結論的:「接受沒有優先權」。但對於初學者,請注意'msgrcv'沒有「優先級」的概念。第四個參數不是優先級,而是消息類型。所以你需要澄清你的預期行爲和實際行爲。 – kaylum