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);
}
特点:链接、作为消息记录、具有特定格式(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);
}
相关文章推荐
- Linux环境进程间通信(三)--- 消息队列
- Linux进程间通信: 消息队列
- linux基础编程 共享内存 通过消息队列实现同步 shmget
- Linux 进程间通信--- 消息队列
- linux消息队列的使用及内核实现原理
- linux编程之消息队列
- Linux IPC实践(4) --System V消息队列(1)
- Linux进程间通信&mdash;&mdash;消息队列
- linux 消息队列简单例程
- Linux --进程间通信--消息队列
- Linux中的消息队列
- linux进程通信--消息队列
- linux消息队列通信
- linux进程间通信之消息队列
- Linux消息队列操作
- [转]Linux进程间通信——使用消息队列
- linux消息队列的默认配置
- Linux进程间通信(IPC)编程实践(三) 详解System V消息队列(1)
- Linux下消息队列和socket绝对速度比拼
- Linux进程通信之POSIX消息队列