UNIX网络编程卷2进程间通信读书笔记(四)—XSI IPC

来源:互联网 发布:网络支持中心网站域名 编辑:程序博客网 时间:2024/05/22 05:29

三.信号

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

 

四.XSI IPC

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

1.标识符和键

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

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

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

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

1

名称:

ftok

功能:

创建一个键

头文件:

#include <sys/ipc.h>

# include <sys/types.h>

函数原形:

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字段。我们一会介绍这些函数。

 

 

 

参考资料:

UNIX高级环境编程》第2 人民邮电出版社

UNIX网络编程》第2 清华大学出版社

POSIX多线程程序设计》 中国电力出版社

Linux网络编程教程》 北京希望电子出版社

原创粉丝点击