我遇到了两个不同进程之间交换消息的问题。 我只能使用动态数组。 我也试过使用共享内存,但我还没有解决我的问题。UNIX消息队列分段错误
这是发件人的代码:
#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;
}
我们都坐在座位边缘试图找出你的问题! –
您是否尝试过使用'-g'选项编译此代码,然后运行'valgrind。/ /程序名称? Valgrind会告诉你更多关于正在发生的事情的信息。如果你使用'yum',你可以在Ubuntu上用'sudo apt-get install valgrind'安装Valgrind,并且可能'yum install valgrind'。 – conradkdotcom