本文是以IBM AIX Unix系统API描述为参考(OS:aix 5.3L)
头文件:
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/msg.h>
数据结构:
struct ipc_perm {
__key_t __key; /* 关键字 */
__uid_t uid; /* 所有者ID */
__gid_t gid; /* 所有者所属组ID */
__uid_t cuid; /* 创建者ID */
__gid_t cgid; /* 创建者所属组ID */
unsigned short int mode; /* 访问权限 */
unsigned short int __pad1;
unsigned short int __seq; /* 序列号 */
unsigned short int __pad2;
unsigned long int __unused1;
unsigned long int __unused2;
};
函数列表:
msgctl 消息控制操作
msgget 获取消息队列
msgsnd 发消息
msgrcv 取消息
msgxrcv 扩展的取消息函数 aix 4.3L以上版本
一、msgget 获取消息队列
int msgget (key_t Key,int MessageFlag);
描述:
根据MessageFlag的值,确定查找还是创建和Key值关联的队列。
参数:
1。Key 消息队列关联的键值
通过ftok函数或者相同的算法指定IPC的Key值,或者是IPC_PRIVATE值。
2。MessageFlag 消息队列创建和权限标识
由下面一个值或者多个值逻辑与构建
IPC_CREAT
如果Key值消息队列不存在,则创建数据结构msg_perm.
IPC_EXCL
如果设置了IPC_CREAT的值,并且数据结构已存在,使函数返回失败。只允许查 询,不允许创建。
S_IRUSR
允许所有者进程可读。
S_IWUSR
允许所有者进程可写。
S_IRGRP
允许所在组进程可读。
S_IWGRP
允许所有者进程可读。
S_IROTH
允许其它进程可读。
S_IWOTH
允许其它进程可写。
以S_I 开头的值定义在sys/mode.h文件中,是文件存取权限集合的一个子集。
返回值:
对于成功完成,此函数返回消息队列的标识符。否则返回-1, 并设置全局变量errno指出错误。
错误代码:
EACCES
消息队列标识符存在,但没有操作权限。
ENOENT
消息队列标识符不存在,并且没事设置IPC_CREAT.
ENOSPC
消息队列标识符存在,但是标识符超出了系统允许的最大限制。
EEXIST
当前的Key值消息队列标识符存在,并且同时设置了IPC_CREAT和IPC_EXCL的值。