• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

MarkGrid

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

XSI IPC机制的优缺点

http://gbk.chinaunix.net/uid-26983585-id-3365393.html
http://blog.163.com/hbu_lijian/blog/static/126129153201261225929289/
 
XSI IPC 包括消息队列、信号量以及共享存储器,他们都依托标识符和键来实现的,这就像是管道靠文件描述符来实现一样!

1、标识符和键

  标识符是内核为每个IPC结构加以引用的,所以也称标识符是XSI IPC的内部名。键则使多个合作进程能够在同一IPC对象上会合,这是外部名。

2、3种得到键的方式

   1)服务器进程可以指定键IPC_PRIVATE创建一个IPC结构,将返回的标识符存放在某处(某个文件)以便客户端程序使用。

   2)在一个共用头文件中定义一个客户进程和服务器进程都认可的键。然后服务器进程用这个指定此键创建一个新的IPC结构。但是这里有个问题是,这个键可能已经被一个IPC使用,这样的话,msgget\semget\shmget 就会错误返回。

   3)客户端和服务器都认可一个路径名和项目ID(0-255),使用ftok将这两个值变换成一个键。然后服务器使用这里键创建一个IPC结构。

   key_t ftok(const char *path,int id);

3、XSI IPC创建必须满足的条件

  XSI IPC创建函数msgget\semget\shmget都需要两个类似的参数key_t和一个整形的flag.

  在满足下列2个条件之一时,才可能成功创建一个XSI IPC结构。

  1)key为IPC_PRIVATE

  2)key还没有和一个IPC结构相关联,并且flag指定了IPC_CREAT标志。

  如果希望创建一个新队列,而且要确保不是引用具有同一标识符的一个现存IPC结构,那么必须在flag中指定IPC_CREAT和IPC_EXCL位。

 4、XSI IPC的访问

  消息队列在访问的时候key必须要等于创建该队列的键,并且不应该指定IPC_CREAT和IPC_PRIVATE。

 5、XSI IPC结构中的ipc_perm结构

  struct ipc_perm

  {

        uid_t   uid;    /* owner’s effective user id */

        gid_t   gid;    /* owner’s effective group id */

        uid_t   cuid;   /* creator’s effective user id */

        gid_t   cgid;   /* creator’s effective group id */

        mode_t  mode;   /* access mode */

        ...
 
     mode注释:

      权限           位

     用户读  :      0400

     用户写  :      0200

     组读    :      0040

     组写    :      0020

     其他读  :      0004

     其他写  :      0002

 

posted on 2013-06-14 23:22  MarkGrid  阅读(468)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3