编程步骤:
1.创建共享消息队列/得到消息队列
2.操作消息队列(发送、接收等)
3.删除队列
案例应用:
创建两个进程A、B
其中A 如下:
#include <unistd.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> struct msgbuf { long type; char data[32]; }; main() { key_t key; int msgid; int i; struct msgbuf msg; //1创建消息队列 key=ftok(".",200); if(key==-1) printf("ftok err:%m "),exit(-1); msgid=msgget(key,0/*IPC_CREAT|IPC_EXCL|0666*/); if(msgid==-1)printf("get err:%m "),exit(-1); //2构造消息 //3发送消息 for(i=1;i<=10;i++) { bzero(msg.data,sizeof(msg.data)); msg.type=1; sprintf(msg.data,"MessageI:%d",i); msgsnd(msgid,&msg,sizeof(msg.data),0); } for(i=1;i<=10;i++) { bzero(msg.data,sizeof(msg.data)); msg.type=2; sprintf(msg.data,"MessageII:%d",i); msgsnd(msgid,&msg,sizeof(msg.data),0); } //4删除队列 //msgctl(msgid,IPC_RMID,0); }
B进程如下:
#include <unistd.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> struct msgbuf { long type; char data[32]; }; main() { key_t key; int msgid; int i; struct msgbuf msg; //1得到消息队列 key=ftok(".",200); if(key==-1) printf("ftok err:%m "),exit(-1); msgid=msgget(key,0); if(msgid==-1)printf("get err:%m "),exit(-1); //2构造消息 //3接收消息 while(1) { bzero(&msg,sizeof(msg)); msg.type=2; msgrcv(msgid,&msg,sizeof(msg.data),2,0); printf("%s ",msg.data); } }