您的位置:首页 > 其它

基于内存的通信之一 “内核共享消息队列”

2014-03-05 09:35 405 查看
编程步骤:

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\n"),exit(-1);

msgid=msgget(key,0/*IPC_CREAT|IPC_EXCL|0666*/);
if(msgid==-1)printf("get err:%m\n"),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\n"),exit(-1);

msgid=msgget(key,0);
if(msgid==-1)printf("get err:%m\n"),exit(-1);
//2构造消息

//3接收消息
while(1)
{
bzero(&msg,sizeof(msg));
msg.type=2;
msgrcv(msgid,&msg,sizeof(msg.data),2,0);
printf("%s\n",msg.data);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐