簡體   English   中英

處理與消息隊列的通信

[英]Process communication with message queue

我的通訊隊列有問題。 在我要編寫的服務器程序中,我需要在使用fork函數創建的兩個進程之間進行通信。 我收到Invalid Argument錯誤,但不知道為什么。 這是我的簡化非工作代碼。

key_t key = ftok(".",'A');
msgget(key,IPC_CREAT);
perror(""); //receive succes

if(fork()>0){
    msgbuf dat;

    msgrcv(key,(void*)&dat,(size_t)sizeof(dat),500,0);
    perror(""); //receive INVALID ARGUMENT
    cout<<dat.mtext<<endl;
}
else
{
    msgbuf data;
    data.mtext[0]='a';
    data.mtype=500;

    msgsnd(key,(void*)&data,(size_t)sizeof(data),0);
    perror(""); //receive INVALID ARGUMENT
}

我要糾正什么才能使其正常工作?

PS我什至嘗試使用睡眠功能來等待子進程,但這無濟於事。

msgrcv/msgsnd采用從msgget返回的整數msqid 而不是密鑰。

int qid = msgget(key, IPC_CREAT);

msgrcv(qid, (void*)&data, (size_t) sizeof(data), 500, 0);

//..........

msgsnd(qid,(void*) &dat,(size_t) sizeof(dat), 0);

請記住, data結構應包括一個long msgtype作為您設置的第一個字段,在這種情況下,大概是msgtype = 500,因為這是您要讀取的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM