A:
#include <head.h>
struct msgbuf {
long mtype; //消息类型
char mtext[1024];//正文数据
};
#define SIZE sizeof(struct msgbuf)-sizeof(long)
int main(int argc, const char *argv[])
{
pid_t ap=fork();
if(ap>0)
{
key_t key=ftok("./",'k');
if(key==-1)
{
perror("ftok");
return -1;
}
int msgid;//消息队列号
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
perror("msgget");
return -1;
}
struct msgbuf info={.mtype=50};
while(1)
{
bzero(info.mtext,sizeof(info.mtext));
printf("A请输入:");
fgets(info.mtext,SIZE,stdin);
info.mtext[strlen(info.mtext)-1]=0;
msgsnd(msgid,&info,SIZE,0);
if((strcmp(info.mtext,"q"))==0)
{
printf("A写退出\n");
break;
}
}
}
else if(ap==0)
{
key_t key=ftok("./",'k');
if(key==-1)
{
perror("ftok");
return -1;
}
int msgid;
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
perror("msgid");
return-1;
}
struct msgbuf info;
while(1)
{
bzero(info.mtext,sizeof(info.mtext));
msgrcv(msgid,&info,SIZE,100,0);
printf("B消息为:%s\n",info.mtext);
if((strcmp(info.mtext,"q"))==0)
{
printf("B退出\n");
break;
}
}
exit(0);
}
else
{
perror("fork");
return -1;
}
return 0;
}
B:
#include <head.h>
struct msgbuf {
long mtype; //消息类型
char mtext[1024];//正文数据
};
#define SIZE sizeof(struct msgbuf)-sizeof(long)
int main(int argc, const char *argv[])
{
pid_t bp=fork();
if(bp>0)
{
key_t key=ftok("./",'k');
if(key==-1)
{
perror("ftok");
return -1;
}
int msgid;
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
perror("msgget");
return -1;
}
struct msgbuf info={.mtype=100};
while(1)
{
bzero(info.mtext,sizeof(info.mtext));
printf("B请输入:");
fgets(info.mtext,SIZE,stdin);
info.mtext[strlen(info.mtext)-1]=0;
msgsnd(msgid,&info,SIZE,0);
if((strcmp(info.mtext,"q"))==0)
{
printf("B写退出\n");
break;
}
}
}
else if(bp==0)
{
key_t key=ftok("./",'k');
if(key==-1)
{
perror("ftok");
return -1;
}
int msgid;//消息队列号
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
perror("msgget");
return -1;
}
struct msgbuf info;
while(1)
{
bzero(info.mtext,sizeof(info.mtext));
msgrcv(msgid,&info,SIZE,50,0);
printf("A消息为:%s\n",info.mtext);
if((strcmp(info.mtext,"q"))==0)
{
printf("A写退出\n");
break;
}
}
exit(0);
}
else
{
perror("fork");
return -1;
}
return 0;
}