msg1
#include<myhead.h>
struct msgbuf{
long mstype;
char text[1024];
};
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{
int pid;
//创建key值
key_t key=ftok("/",'a');
if(key ==-1){
perror("creat key");
return -1;
}
printf("key=%d\n",key);
//创建消息队列
int msgid=msgget(key,IPC_CREAT|0664);
if(msgid==-1){
perror("msgget");
return -1;
}
struct msgbuf msg;
pid=fork();
if(pid>0)//父进程完成写入操作
{
while(1)
{
//写类型10的数据
printf("请输入数据类型\n");
scanf("%ld",&msg.mstype);
printf("请输入数据\n");
scanf("%s",msg.text);
msgsnd(msgid,&msg,SIZE,0);
if(strcmp(msg.text,"quit")==0)break;
//删除消息队列
if(msgctl(msgid,IPC_RMID,NULL)==-1){
perror("msgctl error");
return -1;
}
printf("删除完成\n");
}else if(pid==0)//子进程完成读取操作
{
while(1)
{
msgrcv(msgid,&msg,SIZE,5,0);//读类型5的数据
printf("收到信息:\n");
printf("id=%ld,text=%s\n",msg.mstype,msg.text);
if(strcmp(msg.text,"quit")==0)break;
}
exit(0);
}else{
perror("create pid");
return -1;
}
wait(NULL);
return 0;
}
###msg2
#include<myhead.h>
struct msgbuf{
long mstype;
char text[1024];
};
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{
int pid;
//创建key值
key_t key=ftok("/",'a');
if(key ==-1){
perror("creat key");
return -1;
}
printf("key=%d\n",key);
//创建消息队列
int msgid=msgget(key,IPC_CREAT|0664);
if(msgid==-1){
perror("msgget");
return -1;
}
struct msgbuf msg;
pid=fork();
if(pid>0)//父进程完成写入操作
{
while(1)
{
//写类型5的数据
printf("请输入数据类型\n");
scanf("%ld",&msg.mstype);
printf("请输入数据\n");
scanf("%s",msg.text);
msgsnd(msgid,&msg,SIZE,0);
if(strcmp(msg.text,"quit")==0)break;
}
//删除消息队列
if(msgctl(msgid,IPC_RMID,NULL)==-1){
perror("msgctl error");
return -1;
}
printf("删除完成\n");
}else if(pid==0)//子进程完成读取操作
{
while(1)
{
msgrcv(msgid,&msg,SIZE,10,0);//读类型10的数据
printf("收到信息:\n");
printf("id=%ld,text=%s\n",msg.mstype,msg.text);
if(strcmp(msg.text,"quit")==0)break;
}
exit(0);
}else{
perror("create pid");
return -1;
}
wait(NULL);
return 0;
}