消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式.进程可以向中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。
创建打开消息队列msgget()
读数据从队列msgrcv()
写数据到队列msgsnd()
控制消息队列msgctl()
目前主要有两种类型的消息队列:
POSIX消息队列以及系统V消息队列,系统V消息队列目前被大量使用
系统V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除。
消息队列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,必须提供该消息队列的键值。
msgget
函数的作用:创建消息队列
函数的原型:int msgget (key_t key,int msgflag);
参数:
key:键值:IPC_PRIVATE,设定一个数字,也可以由fork或者。
返回值:成功消息队列ID;
出错-1;
头文件:#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
key_t key;
key = ftok(“/home/pipe/msgget c”,11)
msgsnd
函数的作用:写数据到消息队列
函数的原型:int msgsnd(int msgid,const void * msggp,size_t msgsize,int msgflg);
参数:
msggp 消息结构
struct msgbuf{
long msgtype;
char mtext[1];
}
msgsize:消息的字节数
msgflg:IPC_NOWAIT 写不进去消息直接返回
0:一直等待到能写进去消息为止
返回值:成功0;
出错-1;