#include <myhead.h>
struct msgbuf
{long mtype; //消息类型char mtext[1024]; //消息正文
};//宏定义一个消息正文大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[])
{//创建一个进程pid_t pid=fork();if(pid==-1){perror("fork error");return -1;}if(pid>0)//父进程{//1.创建一个key值key_t key =ftok("/",'A');if(key==-1){perror("fork perror");return -1;}//创建一个消息队列int msqid =msgget(key,IPC_CREAT|0664);if(msqid ==-1){perror("magget perror");return -1;}//不断的向消息队列中写入消息struct msgbuf buf;while(1){printf("信息类型:");scanf("%ld",&buf.mtype);getchar();printf("信息正文:");fgets(buf.mtext,SIZE,stdin);buf.mtext[strlen(buf.mtext)-1]=0;if(strcmp(buf.mtext,"quit")==0){break;}msgsnd(msqid,&buf,SIZE,0);}}else if(pid==0)//子进程{//1.创建一个key值key_t key =ftok("/",'h');if(key==-1){perror("fork perror");return -1; }//创建一个消息队列int msqid =msgget(key,IPC_CREAT|0664);if(msqid ==-1){perror("magget perror");return -1;}struct msgbuf buf;while(1){msgrcv(msqid,&buf,SIZE,1,0);printf("取出为:%s\n",buf.mtext);}}return 0;
}
#include <myhead.h>
struct msgbuf
{long mtype; //消息类型char mtext[1024]; //消息正文
};//宏定义一个消息正文大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[])
{//创建一个进程pid_t pid=fork();if(pid==-1){perror("fork error");return -1;}if(pid==0)//子进程{//1.创建一个key值key_t key =ftok("/",'h');if(key==-1){perror("fork perror");return -1;}//创建一个消息队列int msqid =msgget(key,IPC_CREAT|0664);if(msqid ==-1){perror("magget perror");return -1;}//不断的向消息队列中写入消息struct msgbuf buf;while(1){printf("信息类型:");scanf("%ld",&buf.mtype);getchar();printf("信息正文:");fgets(buf.mtext,SIZE,stdin);buf.mtext[strlen(buf.mtext)-1]=0;if(strcmp(buf.mtext,"quit")==0){break;}msgsnd(msqid,&buf,SIZE,0);}}else if(pid>0)//父进程{//1.创建一个key值key_t key =ftok("/",'A');if(key==-1){perror("fork perror");return -1;}//创建一个消息队列int msqid =msgget(key,IPC_CREAT|0664);if(msqid ==-1){perror("magget perror");return -1;}struct msgbuf buf;while(1){msgrcv(msqid,&buf,SIZE,2,0);printf("取出为:%s\n",buf.mtext);}}return 0;
}
