消息队列就是一个消息的链表。可以把消息看做一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新信息,对消息队列有读权限的进程可以从消息队列中读走消息,消息队列是随内核持续的。
消息队列就是一个消息的链表。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息,包括消息队列键值,用户ID,组ID,消息队列中消息数目等,甚至记录了最近对消息队列读写进程的ID。读者可以访问这些信息,也可以设置其中的某些信息。
全局数据结构struct ipc_ids msg_ids可以访问到每个消息队列头的第一个成员struct kern_ipc_perm能够与具体的消息队列对应起来是因为在该结构中,有一个key_t类型成员key,而key则确定一个消息队列。
消息队列的操作有以下三种类型。
1.打开或者创建消息队列
2.读写操作
3.获得或者设置消息队列属性。
消息队列的API函数
ftok函数:
作用:将文件名转化为键值
函数原型:key_t fotk(char *pathname ,char proj)
返回值:返回与文件对应的键值
2.msgget函数
作用:创建消息队列
原型:int msgget(key_t key,int msgflg)
参数:键值和权限,是可读还是可写,IPC_PRIVATE,设定一个数字,也可以由tok函数获得
返回值:成功则是消息队列的id,出错-1
包含的头文件:#incl