[英]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.