1.消息队列:消息队列就是一个链表。可以把消息看作是一个记录,具有特定的格式以及特定的优先级。
2.消息队列理论基础:系统v消息队列是随内核持续的,只有在内核重启或者显示删除一个消息队列时,该消息队列才会真正的被删除。因此系统中记录消息队列的数据结构位于内核中,系统中所有的消息队列都可以在结构msg_ids中找到访问入口。
3.使用消息队列:
(1)、打开或者创建消息队列。消息对列的内核持续性要求每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,只需提供消息队列的键值即可。
(2)、读写操作。mtype成员代表消息类型,从消息队列中读取消息的一个重要依据就是消息的类型;mtext是消息内容,当然长度不一定为一。因此,对于发送消息来说,首先预制一个msgbuf缓冲区并写入消息类型和内容,调用相应的发送函数即可;对读取消息来说,首先分配这样一个msgbuf缓冲区,然后把消息读入该缓冲区即可。
(3)获得或设置消息队列属性。消息队列的信息基本上都保存在消息队列头中,因此,可以分配一个类似于消息队列头的结构,来返回消息队列的属性;同样可以设置该数据结构。
4消息队列API
a:ftok函数:ftok函数用于将文件名转化成键值。
b:msgget函数:msgget函数用于创建消息队列。
c:msgrcv函数:msgrcv函数用于读出消息队列的数据。
d:msgsnd函数:msgsnd函数用于往消息队列写入数据。
e:msgctl函数:msgctl函数用于控制消息队列。
5.消息队列的限制
每个消息队列的容量都有限制,该值因系统的不同而不同。还有就是每个消息队列所能容纳最大的消息数也限制。