我遇到了兩個不同進程之間交換消息的問題。 我只能使用動態數組。 我也試過使用共享內存,但我還沒有解決我的問題。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