2016-07-24 50 views
-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"); 
      } 


} 
} 
+0

請提供[mcve]。我們至少需要了解發件人代碼的作用,並且還需要解釋您是如何得出結論的:「接受沒有優先權」。但對於初學者,請注意'msgrcv'沒有「優先級」的概念。第四個參數不是優先級,而是消息類型。所以你需要澄清你的預期行爲和實際行爲。 – kaylum

回答

0

我固定它,只是我必須把狀態在x的值,以確保之一3個條件都不合格或者沒有。