码迷,mamicode.com
首页 > 其他好文 > 详细

《Unix网络编程》卷2 读书笔记 第2章- Posix IPC

时间:2014-09-01 01:37:50      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   color   os   io   使用   ar   for   

1. 概述

  • Posix IPC 包括:Posix消息队列、Posix信号量、Posix共享内存区
  • Posix IPC在访问它们的函数和描述它们的信息上有一些类似点。
  • 本章讲述所有这些共同属性:用于标识的路径名、打开或创建时指定的标志、访问权限。

  • Posix IPC 函数汇总

    bubuko.com,布布扣

2. IPC名字

  • 三种类型的Posix IPC都使用“Posix IPC名字”进行标识。mq_open、sem_open、shm_open这三个函数的第一个参数就是这样的一个名字。
  • 对于Linux,Posix IPC名字必须以一个斜杠符打头,且不能再含有任何其他斜杠符。
  • 对于Linux,创建的三种Posix IPC对象分别位于/dev/mqueue/mqname、/dev/shm/sem.semname、/dev/shm/shmname
  • Posix.1定义了三个宏,它们的单个参数是指向某个stat结构的指针,其内容由fstat、lstat、stat这三个函数填入
    • S_TYPEISMQ(buf)、S_TYPEISSEM(buf)、S_TYPEISSHM(buf)
    • 测试某个文件是否为给定文件类型的所有其他宏的名字都以S_IS开头,且它们的单个参数是某个stat结构的st_mode成员。

3. 创建和打开IPC通道

   bubuko.com,布布扣

  • 前3行指定怎样打开对象:只读、只写、读写
    1. 消息队列能以其中任何一种模式打开
    2. 信号量的打开不指定任何模式(任意信号量操作,都需要读写访问权)
    3. 共享内存区对象则不能以只写模式打开
  • 余下4行标志是可选的

    1. O_CREAT,若不存在则创建,需要指定另外的mode参数来指定权限位。指定的权限位受当前进程的文件模式创建掩码umask修正。对于其用户ID,三者都被设置为当前进程的有效用户ID;而对于其组ID,新消息队列对象被设置为当前进程的有效组ID,新信号量或共享内存区对象被设置为当前进程的有效组ID或某个系统默认组ID。
      bubuko.com,布布扣
    2. O_EXCL,和O_CREAT标志一起指定。不存在则创建;已存在则返回EEXIST错误
    3. O_NONBLOCK,该标志使得一个消息队列在队列为空时的读或队列为满时的写不被阻塞
    4. O_TRUNC,如果以读写模式打开了一个共享内存对象,那么该标志将使得该对象的长度为0
  • 下图展示了打开一个IPC对象的真正逻辑流程

    bubuko.com,布布扣

  

bubuko.com,布布扣

4. IPC 权限

bubuko.com,布布扣

5. 小结

  • Posix IPC名字
  • 创建一个新的IPC对象时,指定访问权限
  • 打开一个已存在的IPC对象时,所执行的权限测试与打开一个已存在的文件时一样

《Unix网络编程》卷2 读书笔记 第2章- Posix IPC

标签:des   style   http   color   os   io   使用   ar   for   

原文地址:http://www.cnblogs.com/DayByDay/p/3948428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!