Posix IPC

Posix消息队列,Posix信号量和Posix共享内存区合称为Posix  IPC

px_ipc_name() 函数可以为定位Posix IPC名字而加上正确的目录



####  创建与打开IPC通道:

说明 mq_open sem_open shm_open

只读

只写

读写

O_RDONLY
O_WRONLY
O_RDWR

 

O_RDONLY

O_RDWR

若不存在则创建
排他性创建

O_CREAT
O_EXCL

O_CREAT
O_EXCL
O_CREAT
O_EXCL

非阻塞模式

若已存在则截断

O_NONBLOCK  


O_TRUNC


上表是打开或者创建Posix IPC对象所用的各种oflag的值

前3行指定怎么打开对象:只读只写或者是读写,消息队列能够以任何一种模式打开,信号量的打开不指定模式( 任何信号量的读写都需要读写访问权限 ),共享内存区对象则不能以只写模式打开

以下4行是可选的:

O_CREAT:若不存在则创建由函数的第一个参数所指明的消息队列,信号量或者共享内存区对象

O_EXCL:如果和O_CREAT一起指定,那么IPC函数只在指定名字的对象不存在时才会创建,否则返回EEXIST错误

O_NONBLOCK:该标志使得消息队列在队列为空时的读或者队列填满时的写不被阻塞

O_TRUNC:若以读写模式打开了一个已存在的共享内存区对象,该标识使得该对象的长度被截为0

检查对象是否已存在-》是 -》O_CREAT和O_EXCL同时设置 ?error(errno = EEXIST) :(有访问权限?成功:errno=EACCES)

对象不存在-》O_CREAT设置了 ? (系统表格满?errno=ENOSPC:成功创建):errno=ENOENT


#### 大多数的Unix内核按如下步骤进行权限测试

1)当前进程的有效用户是超级用户(UID=0),允许访问

2)当前进程的有效用户ID=IPC对象的属主ID的前提下,若相应的用户权限位已设置,那就允许访问,否则不允许

3)当前进程的有效组ID=该IPC对象的组ID的前提下,若相应权限位已设置,允许访问,否则不允许

4)其它用户的访问权限位若已设置,允许访问,否则不允许


打开一个Posix IPC对象时,怎么判断是创建了一个新的对象还是引用了一个已有的对象?




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值