gpt4 book ai didi

c - UNIX消息队列msgrcv接收消息失败

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:11 25 4
gpt4 key购买 nike

亲爱的 friend 们,知道为什么 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 设置为任何正值,然后通过将 0 作为 msgtyp 参数。

此外,msgrcv 需要一个指向 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);
}

关于c - UNIX消息队列msgrcv接收消息失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com