XSI IPC总结

                                                    XSI IPC

   参考: https://www.cnblogs.com/nufangrensheng/p/3561681.html

                http://blog.csdn.net/todd911/article/details/19035271

        XSI ipc : 消息队列,信号量,共享存储。

一、标识符和键

       1、标识符:是内核中ipc对象的内部名。

       内核中每种ipc结构里都有一个非负整数的标识符(identifier)

       2、键: ipc的外部对象。数据类型:key_t,  键值会被内核处理为标识符。

       为了让应用层的合作进程能够访问同一个ipc对象,需要在应用层定义一个键(key)来关联。

       3让客户进程与服务进程汇集到同一个ipc对象的方法:

           a: 用键IPC_PRIVATE

               服务进程用IPC_PRIVATE创建ipc结构,返回的标识符存到文件,客户进程来取。

           b: -->定义客/服进程都认可的键

               在头文件中定义公认的键,服务进程用该键创建ipc结构。

                缺点:键可能在之前就已和别的ipc对象结合,再次创建会导致get出错。需删除原ipc对象在创建。

           c: ftok接口将 路径、id 变换出键。id(0---255)

               key_t ftok(const char *path, int id); ftok 创建键后,再让服务器创建ipc结构.

              : path 是一个现有文件,id只能使用低8.

                 创建方式: path中取出stat结构中的st_devst_ino, 然后将它们与项目id结合生成键。

                 缺点:  i节点与键都存放在长整型中,创建的键可能会丢失,导致同一个项目下,不同的路径ftok产生相同键。

         4msgget,semget,shmget接口:

             参数:  key  +  flag    

               创建一个新的ipc结构: flag中指定IPC_CREATIPC_EXCL位;

               若创建一个已存在的ipc将会出错:返回EEXIST

二、IPC 结构权限

          XSI IPC 为每个ipc关联了ipc_perm结构,该结构规定了权限和所有者。

              ipc_perm 结构定义于中,原型如下:

            struct ipc_perm

          {

              key_t        key;                   调用shmget()时给出的关键字

               uid_t           uid;                /*共享内存所有者的有效用户ID */

              gid_t          gid;                /* 共享内存所有者所属组的有效组ID*/

              uid_t          cuid;              /* 共享内存创建者的有效用户ID*/

              gid_t         cgid;              /* 共享内存创建者所属组的有效组ID*/

              unsigned short   mode;          /* Permissions + SHM_DESTSHM_LOCKED标志*/

              unsignedshort    seq;          /* 序列号*/

        };

             调用函数(semget msgget shmget)创建ipc时,会对ipc_perm结构赋值。如修改则调用控制函数(msgctl semctl shmctl)

  注意:只有超级用户或者创建IPC对象的进程有权改变ipc_perm结构的值。

 结构中的mode域类似于文件的stat结构的mode域,但是不可以有执行权限。

14-3  ipc_permmode详解表

操作者

写(更改更新)

操作者

写(更改更新)

用户

0400

0200

其他

0004

0002

0040

      0020

 

 

 

 

三、通过重新配置内核可以修改XSI IPC的结构限制。

四、优缺点

      缺点1IPC结构是在系统范围内起作用的,没有访问计数。

例如,如果进程创建了一个消息队列,在该队列中放入了几条消息,然后终止,但是消息队列及其内容并不会被删除。

   除非出现下述情况:

         a某个进程调用msgrcvmsgctl读消息或删除消息队列;

         b某个进程执行ipcrm1)命令删除消息队列;

         c由正在再启动的系统删除消息队列。

与管道相比:

   管道当最后一个访问管道的进程终止时,管道就被完全地删除。

        FIFO: 当最后一个引用FIFO的进程终止时其名字仍保留在系统中,直至显示地删除时,

       留在FIFO中的数据才全部被删除。

 缺点2:这些IPC结构在文件系统中没有名字。

 不能用文件I/O和文件和目录章节中所述的函数来访问它们或修改它们的特性。

 为了支持它们不得不增加了十几条全新的系统调用(msggetsemopshmat等)。

  表现:

            a、不能用ls命令见到IPC对象

           b、不能用rm命令删除它们

           c、也不能用chmod命令更改它们的访问权限。于是,就不得不增加新的命令ipcs1)和ipcrm1

           d、IPC不使用文件描述符,不能对它们使用多路转接I/O函数:selectpoll。这使得难于一次使用多个IPC结构,

       以及在文件或设备I/O中使用IPC结构。

  优点1.可靠,2.流是受控的,3.面向记录,4.可以用非先进先出方式处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值