UNIX C XSI_IPC对象、共享内存
1.创建IPC对象
#include <sys/ipc.h> key_t ftok(const char* pathname,int proj_id); 成功返回可用于创建或获取IPC的键,失败则返回-
2.创建、获取共享内存
#include <sys/shm.h> int shmget(key_t key,size_t size,int shmflg); 成功返回共享内存标志符,失败返回- --key:共享内存键
--size:共享内存大小
--shmflg:创建标志,可取以下值
-获取,不存在即失败
IPC_CREAT -创建,不存在即创建,已存在即获取
IPC_EXCL -排斥,已存在即失败
3.加载共享内存
#include <sys/shm.h>
void* shmat(int shmid,const void* shmaddr,int shmflg);
成功返回共享内存起始地址,失败返回-
--shmid:共享内存标志符
--shmaddr:指定映射地址,可置NULL,由系统自动选择
--shmflg:加载标志
-以读写方式使用共享内存
SHM_RDONLY - 以只读方式使用共享内存
SHM_RND - 只在shmaddr参数非NULL时起作用
4.卸载共享内存
#include <sys/shm.h> int shmdt(const void* shmaddr); 成功返回0,失败返回- --shmaddr:共享内存起始地址
5.销毁/控制共享内存
#include <sys/shm.h> int shmctl(int shmid,int cmd,struct shmid_ds* buf); 成功返回0,失败返回- --shmid:共享内存标志符
--cmd:控制命令,可取以下值
IPC_STAT -获取共享内存的属性,通过buf参数输出
IPC_SET -设置共享内存的属性,通过buf参数输入,仅以下三个属性可以设置 shmid_ds::shm_perm.uid//拥有者用户ID
shmid_ds::shm_perm.gid//拥有者组ID
shmid_ds::shm_perm.mode//权限
IPC_RMID -销毁共享内存。不是真的销毁,只是做个销毁标记,禁止任何进程对该共享内存形成新的加载
-buf:shmid_ds类型的共享内存属性结构
6.消息队列
创建/获取消息队列
#include <sys/msg.h> int msgget(key_t key,int msgflg); 成功返回消息队列标志符,失败返回- -key:消息队列键
-msgflg:创建标志,可取以下值
-获取,不存在即失败
IPC_CREAT :创建,不存在即失败
IPC_EXCL -排斥,已存在即失败
发送消息
#include <sys/msg.h> int msgsnd (int msqid,const void* msgp,size_t msgsz,int msgflg); 成功返回0,失败返回- -msqid:消息队列标志符
-msgp:指向一个包含消息类型和消息数据的内存块。
-msgsz:期望发送消息数据的字节数
-msgflg :发送标志,一般取0即可
接收消息
#include <sys/msg.h> ssize_t msgrcv (int msqid,void* msgp,size_t msgsz,long msgtyp,int msgflg); 成功返回所接收消息数据的字节数,失败返回- --msqid:消息队列标志符
--msgp:指向一块包含消息类型(4字节)和消息数据的内存
--msgsz :期望接收消息数据的字节数
销毁或控制消息队列
#include <sys/msg.h> int msgctl(int msqid,int cmd,struct msqid_ds* buf);
成功返回0,失败返回- -msqid:消息队列标志符 --cmd:控制命令,可取以下值
IPC_STAT -获取共享内存的属性,通过buf参数输出
IPC_SET -设置共享内存的属性,通过buf参数输入,仅以下三个属性可以设置 shmid_ds::shm_perm.uid//拥有者用户ID
shmid_ds::shm_perm.gid//拥有者组ID
shmid_ds::shm_perm.mode//权限
IPC_RMID -销毁共享内存。不是真的销毁,只是做个销毁标记,禁止任何进程对该共享内存形成新的加载
-buf:shmid_ds类型的共享内存属性结构
7.信号量
创建\获取信号量集
#include <sys.sem.h> int semget (key_t key,int nsems,int semflg); 成功返回信号量集标志符,失败返回- -key :信号量集键
-nsems:信号量个数
-semflg:创建标志,可取以下值
-获取,不存在即创建,已存在即获取
IPC_CREAT -创建,不存在即创建,已存在即获取
IPC_EXCL -排斥,已存在即失败
操作信号量集
#include <sys.sem.h> int semop(int semid,struct sembuf* sops,unsigned nsops); 成功返回0,失败返回- -semid:信号量集标志符
-sops:操作结构体数组
-nsops:操作结构体数组的长度 struct sembuf{
unsigned short sem_num;//信号量编号
short sem_op;//操作数
short sem_flg;//操作标志
};
销毁\控制信号量集
#include <sys/sem.h> int semctl(int semid,int semnum,int cmd,....); 成功返回0(cmd取某些值时存在例外),失败返回- -semid:信号量集标志符
-semnum:信号量编号
-cmd:控制命令
UNIX C XSI_IPC对象、共享内存的更多相关文章
- UNIX环境下的共享内存
好久没更新博客了,最近几个月一直在忙项目,现在终于有时间进一步学习了.这次记录的是unix环境中共享内存的使用方法. 在我理解,共享内存就是在内存中开辟一段空间,各个毫不相干的进程就可以通过访问这段 ...
- Unix IPC之基于共享内存的计数器
目的 本文主要实现一个基于共享内存的计数器,通过父子进程对其访问. 本文程序需基于<<Unix网络编程-卷2>>的环境才能运行.程序中大写开头的函数为其小写同名函数的包裹函数, ...
- <转>UNIX 共享内存应用中的问题及解决方法
http://www.ibm.com/developerworks/cn/aix/library/au-cn-sharemem/ 共享内存是一种非常重要且常用的进程间通信方式,相对于其它IPC机制,因 ...
- vector存入共享内存(了解)
昨天在上篇blog里描写了如何把STL容器放到共享内存里去,不过由于好久不写blog,发觉词汇组织能力差了很多,不少想写的东西写的很零散,今天刚好翻看自己的书签,看到一篇挺老的文章,不过从共享内存到S ...
- Boost:shared_memory_object --- 共享内存
什么是共享内存 共享内存是最快速的进程间通信机制.操作系统在几个进程的地址空间上映射一段内存,然后这几个进程可以在不需要调用操作系统函数的情况下在那段内存上进行读/写操作.但是,在进程读写共享内存时, ...
- 进程间通信IPC:消息队列,信号量,共享内存
2015.3.4星期三 阴天 进程间通信:IPC 文件对象:记录文件描述符,文件开关等 IPC标示符:系统全局的流水号两个进程要通信,打开的是唯一的对象进行通讯,通过key操作 XSI IPC:消息队 ...
- redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换
一. 概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...
- Unix IPC之共享内存区(1)
1 共享内存区 共享内存区是可用IPC形式中最快的,只有映射和解除映射需要进入内核的系统调用,映射后对共享内存区的访问和修改不再需要系统调用(内核只要负责好页表映射和处理页面故障即可),但通常需要同步 ...
- UNIX网络编程 12 15共享内存区
管道,FIFO,消息队列,在两个进程交换信息时,都要经过内核传递 共享内存可以绕过,默认fork生成的子进程 并不与父进程共享内存区 mmap munmap msync 父子进程共享内存区的方法之一是 ...
随机推荐
- ScrollView中嵌套ScrollView或ListView而且内部ScrollView或ListView也可滑动
1.ScrollView中嵌套ScrollView而且内部ScrollView也可滑动 (1)ScrollView继承类 public class InnerScrollView extends Sc ...
- wepack使用
当前使用的版本:webpack 4.5. ⚠️webpack 是需要有 node 环境的,所以在使用之前需要保证你当前安装的有 node. 安装 webpack: npm install webpac ...
- 【Unity 3D】学习笔记三十六:物理引擎——刚体
物理引擎就是游戏中模拟真是的物理效果.如两个物体发生碰撞,物体自由落体等.在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真. 刚体 刚体是一个很很中要的组件. 默认情况下,新创的 ...
- JavaScript Patterns 2.5 (Not) Augmenting Build-in Prototypes
Disadvantage Other developers using your code will probably expect the built-in JavaScript methods t ...
- jQuery Validate插件实现表单强大的验证功能
转自:http://www.jb51.net/article/76595.htm jQuery Validate插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自 ...
- MyBatis高级查询 一对一映射
drop database if exists simple; create database simple; use simple; drop table if exists sys_user; c ...
- E20170630-ts
displacement n. 取代,替代; 免职,停职; [船] 排水量; [化] 置换;
- 0606-工厂模式、单例模式、DBDA的单例和完整功能
工厂模式:只要指定类名,就可以据此获取一个该类的对象. 单例模式:某个类,只允许其“创建”出一个对象. 单例的方法:三私一公(一个私有化对象,一个私有化构造方法,一个私有化克隆方法,一个公共方法返回对 ...
- ckeditor详细设置
CKEditor 3 JavaScript API Documentation : http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.con ...
- [Swift通天遁地]三、手势与图表-(7)创建饼形图表并导出图表为PNG图片
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...