user1.c
#include<myhead.h>
typedef struct
{
long mtype;
char mtext[100];
}buf;
#define zwlen sizeof(buf) - sizeof(long)
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid>0)
{
key_t key1 = ftok("./",'w');
if(key1==-1)
{
perror("ftok");
return -1;
}
int msqid = msgget(key1,IPC_CREAT|0664);
if(msqid==-1)
{
perror("msgget");
return -1;
}
buf msqinfo;
while(1)
{
printf("输入类型\n");
scanf("%ld",&msqinfo.mtype);
getchar();
printf("输入正文\n");
fgets(msqinfo.mtext,sizeof(msqinfo.mtext),stdin);
msqinfo.mtext[strlen(msqinfo.mtext)-1]='\0';
msgsnd(msqid,&msqinfo,zwlen,0);
if(strcmp(msqinfo.mtext,"quit")==0)
{
break;
}
}
if(msgctl(msqid,IPC_RMID,NULL)==-1)
{
perror("msgctl");
return -1;
}
exit(EXIT_SUCCESS);
wait(NULL);
}
else if(pid == 0)
{
key_t key2 = ftok("./",'a');
if(key2==-1)
{
perror("ftok");
return -1;
}
int msqid = msgget(key2,IPC_CREAT|0664);
if(msqid==-1)
{
perror("msgget");
return -1;
}
buf msqinfo;
while(1)
{
msgrcv(msqid,&msqinfo,zwlen,0,0);
printf("%s\n",msqinfo.mtext);
if(strcmp(msqinfo.mtext,"quit")==0)
{
break;
}
}
if(msgctl(msqid,IPC_RMID,NULL)==-1)
{
perror("msgctl");
return -1;
}
exit(EXIT_SUCCESS);
}
else
{
perror("fork");
return -1;
}
return 0;
}
user2.c
#include<myhead.h>
typedef struct
{
long mtype;
char mtext[100];
}buf;
#define zwlen sizeof(buf) - sizeof(long)
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid>0)
{
key_t key2 = ftok("./",'a');
if(key2==-1)
{
perror("ftok");
return -1;
}
int msqid = msgget(key2,IPC_CREAT|0664);
if(msqid==-1)
{
perror("msgget");
return -1;
}
buf msqinfo;
while(1)
{
printf("输入类型\n");
scanf("%ld",&msqinfo.mtype);
getchar();
printf("输入正文\n");
fgets(msqinfo.mtext,sizeof(msqinfo.mtext),stdin);
msqinfo.mtext[strlen(msqinfo.mtext)-1]='\0';
msgsnd(msqid,&msqinfo,zwlen,0);
if(strcmp(msqinfo.mtext,"quit")==0)
{
break;
}
}
if(msgctl(msqid,IPC_RMID,NULL)==-1)
{
perror("msgctl");
return -1;
}
exit(EXIT_SUCCESS);
wait(NULL);
}
else if(pid == 0)
{
key_t key1 = ftok("./",'w');
if(key1==-1)
{
perror("ftok");
return -1;
}
int msqid = msgget(key1,IPC_CREAT|0664);
if(msqid==-1)
{
perror("msgget");
return -1;
}
buf msqinfo;
while(1)
{
msgrcv(msqid,&msqinfo,zwlen,0,0);
printf("%s\n",msqinfo.mtext);
if(strcmp(msqinfo.mtext,"quit")==0)
{
break;
}
}
if(msgctl(msqid,IPC_RMID,NULL)==-1)
{
perror("msgctl");
return -1;
}
exit(EXIT_SUCCESS);
}
else
{
perror("fork");
return -1;
}
return 0;
}