gpt4 book ai didi

c - UNIX 消息队列段错误

转载 作者:行者123 更新时间:2023-11-30 18:52:27 24 4
gpt4 key购买 nike

我在两个不同进程之间交换消息时遇到问题。我必须只使用动态数组。我也尝试过使用共享内存,但还没有解决我的问题。

这是发件人的代码:

  #include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <errno.h>
#define KEYMSG 12345678

typedef struct msg
{
long int type;
char* str1;
char* str2;
}msg;

int main()
{
msg mymsg;
mymsg.str1=(char*)malloc(30*sizeof(char));
mymsg.str2=(char*)malloc(30*sizeof(char));
strcpy(mymsg.str1,"this is a test ");
strcpy(mymsg.str2,"test ok ");
mymsg.type=1;


if((msgget(KEYMSG,IPC_CREAT|0666))==-1)
{
fprintf(stderr,"ERROR CREATION\n");
fflush(stderr);
}
else
{
fprintf(stdout,"CREATION OK\n-----------\n");
fflush(stdout);
}

if((msgsnd(msgget(KEYMSG,0666),&mymsg,sizeof(msg),IPC_NOWAIT))<0)
{
fprintf(stderr,"msg not sent\n");
fflush(stderr);
}
else
{
fprintf(stdout, "\nmsg sent:\n");
fprintf(stdout, "%s\t%s\n\n",mymsg.str1,mymsg.str2);
fflush(stdout);
}

这是读者的代码:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <errno.h>
#include <sys/shm.h>
#define KEYMSG 12345678

typedef struct msg
{
long int type;
char* str1;
char* str2;
}msg;

int main()
{
msg mymsgrcv;
mymsgrcv.str1=(char*)malloc(30*sizeof(char));
mymsgrcv.str2=(char*)malloc(30*sizeof(char));

if((msgrcv(msgget(KEYMSG,0666),&mymsgrcv,sizeof(msg),1,IPC_NOWAIT))==-1)
{
fprintf(stderr,"READ ERROR\n");
fflush(stderr);
}
else
{
fprintf(stdout, "\nmsg read:\n");
fprintf(stdout, "%s\t%s\n\n",mymsgrcv.str1,mymsgrcv.str2);
fflush(stdout);
}

return 0;
}

最佳答案

1.) 在您的消息中,您有指向字符串的指针,但它们的地址只是一个进程的本地地址。这些地址对其他进程没有任何意义。您必须传递字符串而不仅仅是指向它的指针。

定义消息,例如像这样:

   typedef struct msg
{
long int type;
char str1[32];
char str2[32];
}msg;

2.) 始终对 malloc(3) 返回的指针进行错误检查!

关于c - UNIX 消息队列段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34976969/

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