1. 概述

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

  • Posix IPC 函数汇总

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通道

  • 前3行指定怎样打开对象:只读、只写、读写

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

    1. O_CREAT,若不存在则创建,需要指定另外的mode参数来指定权限位。指定的权限位受当前进程的文件模式创建掩码umask修正。对于其用户ID,三者都被设置为当前进程的有效用户ID;而对于其组ID,新消息队列对象被设置为当前进程的有效组ID,新信号量或共享内存区对象被设置为当前进程的有效组ID或某个系统默认组ID。

    2. O_EXCL,和O_CREAT标志一起指定。不存在则创建;已存在则返回EEXIST错误
    3. O_NONBLOCK,该标志使得一个消息队列在队列为空时的读或队列为满时的写不被阻塞
    4. O_TRUNC,如果以读写模式打开了一个共享内存对象,那么该标志将使得该对象的长度为0
  • 下图展示了打开一个IPC对象的真正逻辑流程

4. IPC 权限

5. 小结

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

《Unix网络编程》卷2 读书笔记 第2章- Posix IPC的更多相关文章

  1. [转载] 读《UNIX网络编程 卷1:套接字联网API》

    原文: http://cstdlib.com/tech/2014/10/09/read-unix-network-programming-1/ 文章写的很清楚, 适合初学者 最近看了<UNIX网 ...

  2. 《Linux/Unix系统编程手册》读书笔记 目录

    <Linux/Unix系统编程手册>读书笔记1  (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2  (创建于4月9日,最后更新4月10日) ...

  3. 《Linux/Unix系统编程手册》读书笔记9(文件属性)

    <Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...

  4. 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)

    <Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...

  5. 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)

    <Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...

  6. 《Linux/Unix系统编程手册》读书笔记6

    <Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...

  7. 《Linux/Unix系统编程手册》读书笔记5

    <Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...

  8. 《Linux/Unix系统编程手册》读书笔记4

    <Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...

  9. 《Linux/Unix系统编程手册》读书笔记3

    <Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...

随机推荐

  1. JS事件驱动机制

    还记得当初学JAVA-GUI编程时学习过事件监听机制,此时再学习JavaScript中的事件驱动机制,不免简单.当初学习时也是画过原理图,所以从原理图开始吧! js是采用事件驱动(event-driv ...

  2. 用android模拟器Genymotion定位元素

    1.下载并安装android模拟器Genymotion 2.拖apk包到模拟器,双击模拟器中的apk软件包,进入应用程序 3.下载并安装android sdk 3.1 点击...\Android\an ...

  3. 10个最佳的网站和App开发工具

    这个世界充满了创新,开发的激情和决心是实现更高目标的关键因素.在网站开发中,毫无疑问,工具和可用的在线网页和 app 设计资源,发挥了重要的作用. 下面我们将带来一些网站和 app 的最佳工具.   ...

  4. lintcode:线段树的查询

    线段树的查询 对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值. 为Segmen ...

  5. 重温《js权威指南》 第4、5、6章

    第四章 表达式和运算符         4.2 对象和数组的初始化表达式                数组: []   [3,7] [1+2,3+4] [[1,2,3,],[4,5,6],[7,8, ...

  6. qt之esc键

    Esc键对大家来说实在熟悉不过的了,在Qt中Esc键也会默认的进行一些事件的触发,今天对Esc键测试了一下,突然发现不像我想象的那样,在QDialog中按下Esc键会默认调用reject()方法而不是 ...

  7. 重新格式化hdfs系统的方法

    重新格式化hdfs系统的方法: (1)查看hdfs-ste.xml <span style="font-size:18px;"><property> < ...

  8. python 调用 C++ code

    本文以实例code讲解python 调用 C++的方法. 1. 如果没有参数传递从python传递至C++,python调用C++的最简单方法是将函数声明为C可用函数,然后作为C code被pytho ...

  9. android 四种堆状态

    总结下: ====> 建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型 http://www.cnblogs.com/ghj1976/a ...

  10. HttpClient Post Form提交文件/二进制数据

    HttpClient httpClient = HttpClients.createDefault(); HttpPost httppost = new HttpPost(url); Multipar ...