读数据从队列msgrcv()
写数据到队列msgsnd()
控制消息队列msgctl()
目前主要有两种类型的消息队列:
POSIX消息队列以及系统V消息队列,系统V消息队列目前被大量使用
系统V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok (char*pathname, char proj)
功能: 返回文件名对应的键值。
pathname: 文件名
proj: 项目名(不为0即可)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgget(key_t key, int msgflg)
key:键值,由ftok获得。
msgflg:标志位。
返回值:与健值key相对应的消息队列描述字
IPC_CREAT
创建新的消息队列
IPC_EXCL
与IPC_CREAT一同使用,表示如果要创建的消息队列已经存在,则返回错误。
IPC_NOWAIT
读写消息队列要求无法得到满足时,不阻塞
在以下两种情况下,将创建一个新的消息队列:
1、如果没有与健值key相对应的消息队列,并且 msgflg中包含了IPC_CREAT标志位。
2、key参数为IPC_PRIVATE
int open_queue(key_t keyval)
{
int qid;
if((qid=msgget(keyval,IPC_CREAT))==-1)
{
return(-1);
}
return (qid);
}