APUE_XSI IPC共同点

1.引言

       有三种IPC称作XSI IPC,即消息队列、信号量以及共享存储器。

2.标识符和键

       每个内核中的IPC结构都用一个非负整数的标识符加以引用。例如,对一个消息队列发送或取消息,只需要知道其队列标识符。

       标识符是IPC对象的内部名。为使多个合作进程能够在同一IPC对象上会合,需要提供一个外部命名方案。为此使用键与每个IPC对象关联。键的数据类型为key_t,由内核变换成标识符。

       ftok函数根据一个路径名和项目ID产生一个键。path参数必须引用一个现存文件。当产生键时,只使用id参数的低8位。

#include<sys/ipc.h>
key_t ftok(const char *path, int id);
			//返回值:若成功返回键值,若出错返回(key_t)-1

        三个get函数(msgget、semget、shmget)都有两个类似的参数(见各类XSI IPC):一个key和一个整形flag。如果满足下列两个条件之一,则创建一个新的IPC结构:

①key是IPC_PRIVATE。因此,为了访问一个现存队列,决不能指定IPC_PRIVATE作为键。

②key当前未与消息队列相结合,并且flag中指定了IPC_CREAT位。

       为了访问一个现存的队列,决不能指定IPC_PRIVATE作为键,并且不应指定IPC_CREATE。

3.权限结构

       XSIIPC为每一个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 modes */
     .
     .
     .
};

         mode字段的值类似于文件的mode字段的值,但是对于任何IPC结构都不存在执行权限(x),因此权限最大值为6。下表就是各种权限的值。


4.XSI IPC优点与缺点

       XSIIPC的主要问题是,没有访问计数,因为IPC结构是在系统范围内起作用的。例如如果进程创建了一个消息队列,并在消息队列中放入几则消息,然后终止,但是该消息对列及其内容并不会被删除。这和管道,文件就不同了。所以必须要用显示的操作(msgctl、semctl、shmctl)来删除IPC结构。

       另一个问题是IPC结构没有名字,不能拿IPC结构当文件进行处理,所以适用于文件的操作(read、write、close)都不能使用。所以对于IPC结构设计了特定的操作来读写。

       XSIIPC的有点也有两个:

1、流是受控的,也就是说如果系统资源(缓冲区)短缺或者如果接收进程不能再接收更多消息,则发送进程就要休眠。

2、可以不采用先进先出的方式处理。比如消息队列中的每个消息都有一个消息类型属性,这个属性可以设置为优先级。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值