使用消息队列互相通信
#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 cpid=fork();
if(cpid>0)
{
key_t key;
if((key=ftok("./",'b'))==-1)
{
ERR_MSG("ftok");
return -1;
}
int msgid;
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
ERR_MSG("msgget");
return -1;
}
struct msgbuf puin={.mtype=100};
while(1)
{
bzero(puin.mtext,sizeof(puin.mtext));
printf("请输入:");
fgets(puin.mtext,SIZE,stdin);
puin.mtext[strlen(puin.mtext)-1]='\0';
msgsnd(msgid,&puin,SIZE,0);
if(strcmp(puin.mtext,"quit")==0)
{
break;
}
}
if(msgctl(msgid,IPC_RMID,NULL)==-1)
{
ERR_MSG("msgctl");
return -1;
}
}
else if(cpid==0)
{
key_t key;
if((key=ftok("./",'a'))==-1)
{
ERR_MSG("ftok");
return -1;
}
int msgid;
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
ERR_MSG("msgget");
return -1;
}
struct msgbuf puin;
while(1)
{
bzero(puin.mtext,sizeof(puin.mtext));
msgrcv(msgid,&puin,SIZE,0,0);
printf("message:%s\n",puin.mtext);
}
exit(0);
}
else if(cpid<0)
{
ERR_MSG("fork");
return -1;
}
wait(NULL);
return 0;
}
#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 cpid=fork();
if(cpid>0)
{
key_t key;
if((key=ftok("./",'a'))==-1)
{
ERR_MSG("ftok");
return -1;
}
int msgid;
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
ERR_MSG("msgget");
return -1;
}
struct msgbuf puin={.mtype=100};
while(1)
{
bzero(puin.mtext,sizeof(puin.mtext));
printf("请输入:");
fgets(puin.mtext,SIZE,stdin);
puin.mtext[strlen(puin.mtext)-1]='\0';
msgsnd(msgid,&puin,SIZE,0);
if(strcmp(puin.mtext,"quit")==0)
{
break;
}
}
if(msgctl(msgid,IPC_RMID,NULL)==-1)
{
ERR_MSG("msgctl");
return -1;
}
}
else if(cpid==0)
{
key_t key;
if((key=ftok("./",'b'))==-1)
{
ERR_MSG("ftok");
return -1;
}
int msgid;
if((msgid=msgget(key,IPC_CREAT|0664))==-1)
{
ERR_MSG("msgget");
return -1;
}
struct msgbuf puin;
while(1)
{
bzero(puin.mtext,sizeof(puin.mtext));
msgrcv(msgid,&puin,SIZE,0,0);
printf("message:%s\n",puin.mtext);
}
exit(0);
}
else if(cpid<0)
{
ERR_MSG("fork");
return -1;
}
wait(NULL);
return 0;
}