文档章节

2. Posix IPC

alon龙武
 alon龙武
发布于 2014/11/17 21:56
字数 521
阅读 120
收藏 0

Posix IPC包含三种类型的IPCPosix消息队列、Posix信号量和Posix共享内存区

 

Posix IPC名字

  • 必须符合已有的路径名规则(必须最多PATH_MAX字节构成,包含结尾的空字节)

  • 如果以斜杠符开头,函数的不同调用将访问同一个队列。如果不以斜杠符开头,效果取决于实现

  • 名字中额外斜杠符的解释由实现定义

为了移植,Posix IPC名字必须以一个斜杠符开头,并且不能含有任何其他斜杠符。为了避免移植性问题,应该把Posix IPC名字的#define行放在一个便于修改的头文件。解决上述移植性问题的另一个办法是定义一个px_ipc_name函数,为定位Posix IPC名字添加正确的前缀目录

char *px_ipc_name(const char *name);  # name参数不能有任何斜杠符,Solaris返回/nameUnix返回/tmp/name

 

创建与打开IPC对象

mq_opensem_openshm_open三个创建或打开一个IPC对象的函数,oflag参数指定怎样打开请求的对象创建一个新的消息队列、信号量或共享内存区对象时,至少需要mode参数,指定权限位。三个函数打开一个存在的消息队列、信号量或共享内存区对象时,需要基于如下信息执行权限测试:创建时赋予IPC对象的权限位;请求访问类型O_RDONLYO_WRONLYO_RDWR;调用进程的有效ID、有效组ID及各个辅助组ID

     打开或创建Posix IPC对象所用的各种oflag常值

创建新的IPC对象所用的mode常值

 

O_EXCL:如果该标志和O_CREAT一起指定,那么IPC函数只在所指定名字的消息队列、信号量或共享内存区对象不存在时才创建新的对象。如果对象已经存在,那么返回一个EEXIST错误

                打开一个IPC对象的真正逻辑流程

© 著作权归作者所有

共有 人打赏支持
alon龙武
粉丝 2
博文 14
码字总数 20481
作品 0
深圳
程序员
Linux IPC总结

我看网络上System V IPC 与POSIX IPC总是混在一起搞不清,今天总结一下. System V IPC API 1,消息队列 int ftok(const char *pathname, int prj_id); int msgget(key_t key,int msgflag); int......

jlmpp
2010/11/16
770
0
深刻理解Linux进程间通信(IPC)

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实 验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信...

墙头草
2010/11/19
0
0
第15章 进程间通行 15.6 XSI IPC 15.7 消息队列

15.6 XSI IPC (1)3种称作XSI IPC的IPC是: 1)消息队列 2)信号量 3)共享存储器 (2)标识符和键 1)标识符:是一个非负整数,用于引用IPC结构。是IPC对象的内部名。 2)键:IPC对象的外部...

fxdhdu
2015/10/23
79
0
No space left on device: Couldn't create accept lock

原因: (1) 确认是否是硬盘空间不足;结果发现不是空间的问题; (2) 网上查看了下,发现是ipc不足。可以使用ipcs -s(|grep apache的group) 处理: (1) 可以使用$ ipcrm -s 清理指定 semaph...

极速前行
2016/05/17
0
0
linux共享内存的设计

posix的共享内存是通过用户空间挂在的tmpfs文件系统实现的,而system V的共享内存是由内核本身的tmpfs实现的,这里可以看出,二者其实是用同一种机制实现的,不同的是用户接口不同,posix旨在...

晨曦之光
2012/04/10
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高三暑假我是怎么想开去学linux系统的

高三的时候,我有一句口头禅:“老了老了,现在做题越来越迟钝了”。当时整天日夜苦读,体重日益增加,脸色越来越黯淡,我在终于熬过了高考的时候,简直心里面乐得开了花。我终于可以去做自己...

linuxprobe16
21分钟前
0
0
Python 获得命令行参数的方法

需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys.argv[1] 参数2: sys.argv[2]

编程老陆
28分钟前
0
0
链队

队列用链表来表示时,需要用两个变量来记录队列两端的变化:theFront,theBack. 根据链接方向的不同,链队有两种链接方式(其实就是链表的头插入节点和尾插入节点,头删除节点和尾删除节点)。...

Frost729
31分钟前
0
0
IDEA toString() json模板

public java.lang.String toString() {java.lang.StringBuilder builder = new java.lang.StringBuilder();#set ($i = 0)#foreach ($member in $members)#if ($i == 0)builder.appen......

Mtok
41分钟前
0
0
Dubbo内核实现之SPI简单介绍

Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLo...

明理萝
46分钟前
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部