#include<head.h>
struct msgbuf
{
long mtype;
char mtext[1024];
};
#define SIZE sizeof(struct msgbuf)-sizeof(long)
int main(int argc, char const *argv[])
{
key_t key=ftok("/",'k');
if(key==-1)
{
perror("ftok error");
return -1;
}
printf("key=%#x\n",key);
int msgid=msgget(key,IPC_CREAT|0664);
if(msgid==-1)
{
perror("msgget error");
return -1;
}
printf("msgid=%d\n",msgid);
struct msgbuf buf;
int fid=fork();
if(fid<0)
{
perror("fork error");
return -1;
}
if(fid==0)
{
while(1)
{
printf("消息类型:");
scanf("%ld",&buf.mtype);
getchar();
printf("请输入消息正文:");
fgets(buf.mtext,SIZE,stdin);
buf.mtext[strlen(buf.mtext)-1]=0;
msgsnd(msgid,&buf,SIZE,0);
printf("发送成功\n");
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
}
exit(EXIT_SUCCESS);
}
while(1)
{
msgrcv(msgid,&buf,SIZE,0,0);
printf("收到消息为:%s\n",buf.mtext);
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
}
return 0;
}
#include<head.h>
struct msgbuf
{
long mtype;
char mtext[1024];
};
#define SIZE sizeof(struct msgbuf)-sizeof(long)
int main(int argc, char const *argv[])
{
key_t key=ftok("/",'k');
if(key==-1)
{
perror("ftok error");
return -1;
}
printf("key=%#x\n",key);
int msgid=msgget(key,IPC_CREAT|0664);
if(msgid==-1)
{
perror("msgget error");
return -1;
}
printf("msgid=%d\n",msgid);
struct msgbuf buf;
int fid=fork();
if(fid<0)
{
perror("fork error");
return -1;
}
if(fid==0)
{
while(1)
{
msgrcv(msgid,&buf,SIZE,0,0);
printf("收到消息为:%s\n",buf.mtext);
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
}
exit(EXIT_SUCCESS);
}
while(1)
{
printf("消息类型:");
scanf("%ld",&buf.mtype);
getchar();
printf("请输入消息正文:");
fgets(buf.mtext,SIZE,stdin);
buf.mtext[strlen(buf.mtext)-1]=0;
msgsnd(msgid,&buf,SIZE,0);
printf("发送成功\n");
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
}
return 0;
}
思维导图