1
2
#include "myhead.h"
struct msgbuf{
long mtype;//消息类型
char mtext[1024];//消息正文大小
};
//宏定义消息正文的大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{
//创建key值
key_t key=ftok("/",'k');
if(key==-1){
perror("key create 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 pid=-1;
pid=fork();
if(pid>0){
//向消息队列中存放数据
while(1){
//输入消息内容
printf("请输入你要发送的类型:");
scanf("%ld",&buf.mtype);
printf("请输入消息内容:");
scanf("%s",buf.mtext);
//将消息放入消息队列中
msgsnd(msgid,&buf,SIZE,0);
//判断退出条件
if(strcmp(buf.mtext,"quit")==0){
break;
}
}
waitpid(-1,NULL,WNOHANG);
}else if(pid==0){
while(1){
msgrcv(msgid,&buf,SIZE,15,0);
printf("收到消息:%s\n",buf.mtext);
if(strcmp(buf.mtext,"quit")==0){
break;
}
}
exit(EXIT_SUCCESS);
}else{
perror("fork error");
return -1;
}
return 0;
}