您的位置:首页 > 运维架构 > Linux

linux消息队列

2013-04-01 12:48 232 查看
一、消息队列

特点:链接、作为消息记录、具有特定格式(POSIX可移植操作系统接口、系统V消息队列)、持续性(随内核持续,只有内核重启,或者人工删除才会消失)

二、返回键值:

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/msg.h>

1、创建键值

key_t ftok(char *pathname,char proj)

2、返回消息队列描述符

int msgget(key_t key,int msgflag)

其中:msgflag为IPC_CREAT,IPC_EXCL,IPC_NOWAIT

3、发送消息队列

int msgbuf(int msgid,struct msgbuf *msgp,int msg)

其中:int msgflg选择默认的IPC_NOWAIT

struct msgbuf

         {

          long type;

        char data[255]

         };

4、接收消息队列

int msgrcv(int msqid,struct *msgp,int msgz,long type,int msgr)

result=msgrcv(gid,gbuf,length,type,0);

PS:读取gid中读取消息,消息的类型是type类型,读取成功后,放在gbuf的指向位置,其中消息长度为=sizeof();

 

#include<stdio h="">
#include<sys types="" h="">
#include<sys ipc="" h="">
#include<sys msg="" h="">
#include<unistd h="">
//设置结构体
struct msgbuf
{
int mtype;
char data[255];
};
int main()
{
key_t key;
int msgid;
struct msgbuf msg_buf;
//返回键值
key=ftok("/tmp/2",'a');
printf("key=[%x]\n",key);
//放回键值所对应的的描述符
msgid=msgget(key,IPC_CREAT|0666);
if(msgid==-1)
{
printf("creat error\n");
}
//获得type类型
msg_buf.mtype=getpid();
//写入数据
strcpy(msg_buf.data,"test data");
int ret;
//发送消息
ret=msgsnd(msgid,&msg_buf,sizeof(msg_buf.data),IPC_NOWAIT);
if(ret==-1)
{
printf("send message error\n");
return -1;
}
memset(&msg_buf,0,sizeof(msg_buf));
//接受消息
ret=msgrcv(msgid,&msg_buf,sizeof(msg_buf.data),getpid(),IPC_NOWAIT);
if(ret==-1)
{
printf("receive message error\n");
return -1;
}
printf("reveive mes =[%s]\n",msg_buf.data);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息