C++封装Linux消息队列

原文链接:C++封装Linux消息队列
发布时间:2015-09-03 21:41:36

                消息队列是Linux进程间通信方式之一,在面向对象编程中,需要对其封装。 

一、消息队列的特点

1、异步通信,消息队列会保存进程发送的消息,其他进程不一定要及时取走消息。

2、可以发送不同类型的消息,消息的头部用long类型的字段标记。

3、取消息时,不一定按先进先出的方式,可以按消息的类型来取。

4、消息队列内部是用一个链表来保存消息,当消息被取走后,这个消息就从链表中删除了,而且这个链表的长度

       是有限制的,当消息存满后,不能再存入消息。

二、msgid和关键字

消息队列在内核中,要用一个非负整数来标记(类似于描述符或者句柄),这个非负整数称作msqid,即消息

队列的ID,但是要创建或者打开一个消息队列需要一个关键字,这个关键字其实是一个长整型数据。在进程

通信时,必须要约定使用同一个关键字,这样就可以得到同一个消息队列,因为消息队列是由内核维护的,

不同的进程使用相同关键字打开或者创建的消息队列,获得的msgid是相同的。

本例中使用一个文件路径加上课题ID(0~255)调用ftok函数产生一个关键字。