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. C# 获取windows特殊路径

    虽然是古老的问题,最近用到这个,查一下还不少东东呐 一.使用Environment.SpecialFolder 该方法最简单,直接使用即可,只是提供的特殊路径比较少. (1)使用方法:string p ...

  2. FastJson与Gson小测试

    最近用到Json来传输数据,找到两个比较简单的工具 Gson 和 FastJson随便测试一下两个工具的效率~ 1 package com.json.fast; import java.util.Ar ...

  3. ubuntu挂载磁盘

    1.首先查磁盘UUID:sudo blkid 2.打开挂载文件:sudo /etc/fstab 3.写挂载文件: UUID=000860AE000FDD66 /mnt/disk1            ...

  4. SSDP 简单服务发现协议

    http://blog.csdn.net/lilypp/article/details/6631951

  5. ubuntu系统使用minicom终端操作说明

    http://blog.chinaunix.net/uid-22030783-id-3350834.html 在linux下,使用minicom作为串口终端工具,默认的串口设备是/dev/ttyS0, ...

  6. SWD接口:探索&泄密&延伸

    http://bbs.21ic.com/icview-871133-1-1.html 文买了个JLINKV9,以为神器,拿到手发现根本不是,完全没必要替换V8,想自己做个另类的调试器,当然想只是想而已 ...

  7. Fragment 的用法小技巧

    public static class ArrayListFragment extends ListFragment { int mNum; /** * Create a new instance o ...

  8. Java Map排序

    Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value). 1.按键排序 jdk内置的java.util包下的Tr ...

  9. 273. Integer to English Words

    题目: Convert a non-negative integer to its english words representation. Given input is guaranteed to ...

  10. 怎样做出优秀的扁平化设计风格 PPT 或 Keynote 幻灯片演示文稿?(装)

    不知道你有没有想过,为什么很人多的扁平化 PPT 是这个样子: 或者是这样: 然而,还有一小撮人的扁平化 PPT 却拥有那么高颜值: 为什么会产生这么大的差距呢?丑逼 PPT 应该如何逆袭成为帅逼呢? ...