Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2412713
  • 博文数量: 298
  • 博客积分: 7876
  • 博客等级: 准将
  • 技术积分: 5500
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-23 13:39
文章存档

2013年(2)

2012年(142)

2011年(154)

分类: LINUX

2011-04-05 00:02:44

三.信号

       信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。由于前面已经介绍,这里就不再说了。

 

四.XSI IPC

下面的三种进程间通信方式,即消息队列,信号量以及共享内存,它们之间有很多相似之处。我们统一称它们为XSI  IPC,下面我们先介绍它们的相似之处。

1.标识符和键

       每个XSI IPC都用一个非负整数的标识符(identifier)加以引用。例如,为了对一个消息队列发送或取消消息,只须知道其队列标识符。与文件标识符不同,IPC标识符不是小的整数。当一个IPC结构被创建,以后又被删除,与这种结构相关的标识符连续加1,直至达到一个整数的最大正值,然后又回转到0

       标识符是IPC对象的内部名。为使多个合作进程能够在同一IPC对象上会合,需要提供一个外部名方案。为此使用了键(key,每个IPC对象都与一个键相关联,于是键就用为该对象的外部名。

       无论何时创建IPC结构,都应指定一个键,键的数据类型是基本系统数据类型key_t,通常在头文件中被定义为长整形。键由内核变换成标识符。

       我们用ftok函数创建一个键。

1

名称:

ftok

功能:

创建一个键

头文件:

#include

# include

函数原形:

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

参数:

path

id

返回值:

若成功返回键,若出错返回(key_t-1

      

 

 

 

 

 

 

 

 

 

path函数必须引用一个现存文件。当产生键时,只使用id参数的低8位。

       注意:

1pathname一定要在系统中存在

2pathname一定是使用进程能够访问的

3proj_id是一个1255之间的一个整数值,典型的值是一个ASCII值。

 

2.权限结构

       XSI IPC 为每一个IPC结构设置了一个ipc_perm结构。该结构规定了权限和所有者。

struct ipc_perm

{ ushort uid; /*当前用户*/

ushort gid; /*当前进程组*/

ushort cuid; /*创建用户*/

ushort cgid; /*创建进程组*/

ushort mode; /*存取许可权*/

{ short pid1; long pad2;} /*由系统使用*/

}

其中mode权限位设置如下表

 

权限

用户读

用户写

0400

0200

组读

组写

0040

0020

其他读

其他写

0004

0002

 

       在创建XSI IPC结构时,对所有字段都赋初值。可以调用msgctlsemctlshmctl修改uid,gidmode字段。我们一会介绍这些函数。

阅读(1128) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~