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对象、共享内存的更多相关文章

  1. UNIX环境下的共享内存

    好久没更新博客了,最近几个月一直在忙项目,现在终于有时间进一步学习了.这次记录的是unix环境中共享内存的使用方法.  在我理解,共享内存就是在内存中开辟一段空间,各个毫不相干的进程就可以通过访问这段 ...

  2. Unix IPC之基于共享内存的计数器

    目的 本文主要实现一个基于共享内存的计数器,通过父子进程对其访问. 本文程序需基于<<Unix网络编程-卷2>>的环境才能运行.程序中大写开头的函数为其小写同名函数的包裹函数, ...

  3. <转>UNIX 共享内存应用中的问题及解决方法

    http://www.ibm.com/developerworks/cn/aix/library/au-cn-sharemem/ 共享内存是一种非常重要且常用的进程间通信方式,相对于其它IPC机制,因 ...

  4. vector存入共享内存(了解)

    昨天在上篇blog里描写了如何把STL容器放到共享内存里去,不过由于好久不写blog,发觉词汇组织能力差了很多,不少想写的东西写的很零散,今天刚好翻看自己的书签,看到一篇挺老的文章,不过从共享内存到S ...

  5. Boost:shared_memory_object --- 共享内存

    什么是共享内存 共享内存是最快速的进程间通信机制.操作系统在几个进程的地址空间上映射一段内存,然后这几个进程可以在不需要调用操作系统函数的情况下在那段内存上进行读/写操作.但是,在进程读写共享内存时, ...

  6. 进程间通信IPC:消息队列,信号量,共享内存

    2015.3.4星期三 阴天 进程间通信:IPC 文件对象:记录文件描述符,文件开关等 IPC标示符:系统全局的流水号两个进程要通信,打开的是唯一的对象进行通讯,通过key操作 XSI IPC:消息队 ...

  7. redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换

    一.  概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...

  8. Unix IPC之共享内存区(1)

    1 共享内存区 共享内存区是可用IPC形式中最快的,只有映射和解除映射需要进入内核的系统调用,映射后对共享内存区的访问和修改不再需要系统调用(内核只要负责好页表映射和处理页面故障即可),但通常需要同步 ...

  9. UNIX网络编程 12 15共享内存区

    管道,FIFO,消息队列,在两个进程交换信息时,都要经过内核传递 共享内存可以绕过,默认fork生成的子进程 并不与父进程共享内存区 mmap munmap msync 父子进程共享内存区的方法之一是 ...

随机推荐

  1. C# 生成pdf文件客户端下载

    itextsharp.dll 下载:http://sourceforge.net/projects/itextsharp/ 程序需引用:itextsharp.dll,itextsharp.pdfa.d ...

  2. Cocos2d-x教程(26)-Cocos2d-x + Lua脚本实现大地图缩放功能

    欢迎增加 Cocos2d-x 交流群: 193411763 视频教程地址:http://www.tudou.com/programs/view/qRiOfppMghM/ 转载请注明原文出处:http: ...

  3. SPOJ XMAX - XOR Maximization

    XMAX - XOR Maximization Given a set of integers S = { a1, a2, a3, ... a|S| }, we define a function X ...

  4. 分享tiny4412,emmc烧录u-boot, 支持fastboot模式烧写emmc【转】

    本文转载自:http://www.arm9home.net/read.php?tid-80810.html 分享tiny4412,emmc烧录u-boot, 支持fastboot模式烧写emmc   ...

  5. 【模板】 倍增lca

    虽然很基础,但是还是复习了一下,毕竟比树剖好写... 代码: #include<iostream> #include<cstdio> #include<cmath> ...

  6. yum -y --downloadonly --downloaddir=/root/ruiy update

    依赖关系解决 ============================================================================================= ...

  7. C语言作用于修饰符

    之前就遇到了坑,莫名其妙报错.   总结下: extern   声明在其他文件里 static     仅当前文件可见

  8. AirtestIDE详解(跨平台的UI自动化编辑器)

    Airtest 是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具. AirtestIDE 是一个跨平台.多端(Windows.web.android.ios.游戏)的UI自动化测 ...

  9. akka设计模式系列-Aggregate模式

    所谓的Aggregate模式,其实就是聚合模式,跟masterWorker模式有点类似,但其出发点不同.masterWorker模式是指master向worker发送命令,worker完成某种业务逻辑 ...

  10. .ignore配置问题1:配置后所忽略的文件不起作用

    gitignore可以指定git忽略指定文件. 问题: 想忽略一些文件在.gitignore文件中会配置对应的文件,但是有时候配置后还是没有起作用: 我在element-ui封装个性化组件时,需要更换 ...