Aix Unix IPC之消息队列

时间:2021-07-14 03:42:23

本文是以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的值。