1.1 系统V消息队列
消息队列中的每个消息都有如下的数据结构:
struct msgbuf
{
long mtype; // 消息类型
char mtext[n]; // 消息内容,n由用户自己定义
};
1.1.1 ftok( )
#include<sys/types.h>
#include<sys/ipc.h>
key_tftok( const char *name, int id )
参数name指定了文件名(包含路径),该文件必须存在,而且当前进程必须能够访问该文件。
参数id只有低8位有效。
只有当name和id取值都相同时,返回的键值key才是相同的。
成功返回键值,失败返回-1。
1.1.2 msgget( )
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
intmsgget( key_t key, int msgflg )
创建或获取消息队列;成功返回与key相关联的消息队列id,失败返回-1。
参数msgflg可以取IPC_CREAT、IPC_EXCL、IPC_NOWAIT。
单独使用IPC_CREAT,如果不存在与键值key相关联的消息队列,就创建一个新的消息队列,并返回其id,如果已经存在与键值key相关联的消息队列,就返回该消息队列的id。
单独使用IPC_EXCL是没有意义的,如果IPC_EXCL和IPC_CREAT一起使用,当与键值key相关联的消息队列已经存在时,就失败返回-1。
下面两种情况会创建一个新的消息队列:
1.参数msgflg指定IPC_CREAT,而且没有消息队列与键值key相关联;
2.参数key指定IPC_PRIVATE;
参数msgflg的低9位指定新创建消息队列的访问权限:
所有者 |
组成员 |
其他成员 |
||||||
读 |
写 |
执行 |
读 |
写 |
执行 |