UNIXメッセージキューMSGRCVはメッセージを受信できませんでした
-
22-10-2019 - |
質問
親愛なる友人、なぜMSGRCVが空白のバッファを受け取っているのか、どんな考えもありますか?
これがコードです:
enter code here
#include <sys/msg.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
typedef struct mymsg {
long mtype;
char mtext[24];
}mymsg;
int main()
{
int msqid;
mymsg msg,buff;
msqid=msgget(IPC_PRIVATE,IPC_CREAT|IPC_EXCL);
if(msqid==-1){
perror("FAiled to create message queue\n");
}
else{
printf("Message queue id:%u\n",msqid);
}
msg.mtype=1;
strcpy(msg.mtext,"This is a message");
if(msgsnd(msqid,&msg,sizeof(msg.mtext),0)==-1){
perror("msgsnd failed:");
}
else{
printf("Message sent successfully\n");
}
//ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
// msgrcv(msqid,buff.mtext,sizeof(msg.mtext),1,0); This was error
msgrcv(msqid,&buff,sizeof(msg.mtext),1,0); // This is correct (Thanks to Erik)
printf("The message received is: %s\n",buff.mtext);
}
Output:
[root@dhcppc0 message_queue]# ./a.out
Message queue id:294919
Message sent successfully
The message received is:
1,1 Top
解決
msgbuf.mtype
あなたが言っているので、1に設定する必要があります msgrcv
タイプ1のメッセージが必要です。
または、設定することもできます msgbuf.mtype
肯定的な価値に、そしてそれから伝えます msgrcv
0を渡してメッセージタイプが必要です msgtyp
口論。
また、 msgrcv
aへのポインターが期待されます msgbuf
:
msgrcv(msqid,&buff,sizeof(msg.mtext),1,0);
編集:テスト済み作業出典:
#include <sys/msg.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
typedef struct mymsg {
long mtype;
char mtext[24];
}mymsg;
int main()
{
int msqid;
mymsg msg,buff;
msqid=msgget(IPC_PRIVATE,IPC_CREAT|IPC_EXCL);
if(msqid==-1){
perror("FAiled to create message queue\n");
}
else{
printf("Message queue id:%u\n",msqid);
}
msg.mtype=1; // was there failed to copy
strcpy(msg.mtext,"This is a message");
if(msgsnd(msqid,&msg,sizeof(msg.mtext),0)==-1){
perror("msgsnd failed:");
}
else{
printf("Message sent successfully\n");
}
//ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
msgrcv(msqid,&buff,sizeof(msg.mtext),1,0);
printf("The message received is: %s\n",buff.mtext);
}
所属していません StackOverflow