一起talk C栗子吧(第九十五回:C语言实例--使用共享内存进行进程间通信一)...
各位看官们,大家好,上一回中咱们说的是SystemV IPC结构概述的样例,这一回咱们说的样例是:使用共享内存进行进程间通信。
闲话休提。言归正转。让我们一起talk C栗子吧!
共享内存是SystemV IPC结构这样的抽象概念的一种具体对象。就和它的名字一样,它提供了一段内存空间供不同的进程使用,进程之间能够通过该内存空间传递数据,进而实现进程间的通信。
在介绍共享内存的用法之前,我们先介绍几个函数,这些函数都是用来操作共享的内存的。
shmget函数
int shmget(key_t key, size_t size,int shmflag)
该函数用来获取共享内存。函数返回共享内存的标识符。我们能够通过该标识符使用共享内存;
- 第一个參数是键值,通过它来操作IPC在内核中的结构。也就是共享内存在内核中的结构;(上一回中介绍过)
- 第二个參数是共享内存的容量。单位是byte;
- 第三个參数是共享内存的权限标记,该权限和文件权限一样;
- 该函数执行成功时返回共享内存标识符。否则返回-1;
在使用该函数的时候,我们须要自定义一个共享内存的类型,而且计算出该类型的内存空间。共享内存的类型能够根据程序须要来定义,常见的是定义一个结构体类型。
shmat函数
void * shmat(int shm_id, const void *shm_addr,int shmflg)
该函数用来把共享内存连接到进程的地址空间中,这样进程就能够使用共享内存了。
- 第一个參数是共享内存的标识符,通过shmget函数能够获得;
- 第二个參数是一个地址,该地址表示共享内存连接到进程中的位置;
- 第三个參数是一个位标记,仅仅有三个值供使用:SHM_RND,SHM_RDONLY还有0;
- 该函数执行成功时返回指向共享内存第一个字节的指针,否则返回-1。
在使用该函数的时候,第二个參数通常使用一个空指针,空指针表示让系统自己选择共享内存连接到进程地址空间的位置,这时第三參数能够使用SHM_RDONLY或者0。假设给第二个參数指定了地址。那么第三个參数须要使用SHM_RND。
shmdt函数
int shmdt(const void *shm_addr)
该函数用来把共享内存从进程的地址空间中分离出来,分离以后进程就不能使用共享内存了;
- 第一个參数是一个地址,它是共享内存第一个字节的指针,也就是shmat函数的返回值。
- 该函数执行成功时返回0,否则返回-1;
shmctl函数
int shmctl(int shm_id, int cmd,struct shmid_ds *buf)
该函数用来把共享内存连接到进程的地址空间中,这样进程就能够使用共享内存了;
- 第一个參数是共享内存的标识符。通过shmget函数能够获得;
- 第二个參数是一个命令。表示对共享内存的操作,仅仅有三个命令供使用:IPC_STAT,IPC_SET和IPC_RMID;
- 第三个參数是一个结构体指针,该结构体中有共享内存的权限和全部者等信息。
- 该函数执行成功时返回0,否则返回-1;
我们通常使用该函数删除共享内存。这时候须要给第二个參数赋值为IPC_RMID,表示删除共享内存,第三參数能够为空指针。
第二个參数的另外两个命令:
- IPC_STAT表示把第三个參数中的内容和共享内存关联起来;
- IPC_SET表示把第三个參数中的内容设置为共享内存的值。
第三个參数的类型,我们在上一回中提起过,它和SystemV IPC的结构相似,除了必须有的成员外,它还有自己特有的成员。
我从源码中找到了第三个參数的类型。具体的定义例如以下:(位于linux-4.0.3/include/linux/shm.h文件里)
struct shmid_kernel /* private to the kernel */
{ struct kern_ipc_perm shm_perm;struct file *shm_file;unsigned long shm_nattch;unsigned long shm_segsz;time_t shm_atim;time_t shm_dtim;time_t shm_ctim;pid_t shm_cprid;pid_t shm_lprid;struct user_struct *mlock_user;/* The task created the shm object. NULL if the task is dead. */struct task_struct *shm_creator;struct list_head shm_clist; /* list by creator */
};
各位看官。关于使用共享内存进行进程间通信的样例咱们就讲到这里。
欲知后面还有什么样例,且听下回分解 。
一起talk C栗子吧(第九十五回:C语言实例--使用共享内存进行进程间通信一)...相关推荐
- 第九十五章 SQL函数 MINUTE
文章目录 第九十五章 SQL函数 MINUTE 大纲 参数 描述 示例 第九十五章 SQL函数 MINUTE 返回日期时间表达式的分钟的时间函数. 大纲 {fn MINUTE(time-express ...
- 第十五回(二):文会内战平分秋色 树下阔论使坏心焦【林大帅作品】
时光飞逝,转眼便至周五,亦是莉莉一行人歌咏大赛之日.当日兴化府,为那重阳妈祖祭典造势,这歌咏便是其一.故莉莉恩师率音乐生参战,因每年会试,那榜上题名的,文会总不如擢英,哲理.刘学监便剑走偏方,每每于宫 ...
- C语言第十次作业,第十五次c语言作业.doc
<第十五次c语言作业.doc>由会员分享,可在线阅读,更多相关<第十五次c语言作业.doc(9页珍藏版)>请在人人文库网上搜索. 1.第十五次课作业:习题15-1:题码:章节: ...
- MySQL数据库教程之十五:MySQL触发器实例
MySQL数据库教程之十五:MySQL触发器实例 准备工作: 先启动Navicat for MySQL,建立数据库 建立两个表:Goods(商品表).Orders(订单表) Goods(商品表) cr ...
- Oracle(11g)数据库教程之十五:Oracle触发器实例
Oracle(11g)数据库教程之十五:Oracle触发器实例 准备工作: 先启动Oracle,连接数据库 建立两个表:Goods(商品表).Orders(订单表) Goods(商品表) create ...
- 数据结构(十五) -- C语言版 -- 树 - 二叉树的操作进阶之创建、插入、删除、查询、销毁
内容预览 零.读前说明 一.概述 二.数据模型分析创建 2.1.节点的结构模型 2.2.操作函数结构模型 三.创建 四.插入 4.1.在树中的某一个叶子节点位置插入新节点 4.2.在树中的某一个非叶子 ...
- 用c语言赋值表示的例子,一起talk C栗子吧(第五回:C语言实例--数组巧妙赋值)...
一起talk C栗子吧(第五回:C语言实例--数组巧妙赋值) 各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C栗子吧! ...
- 《东周列国志》第九十九回 武安君含冤死杜邮 吕不韦巧计归异人
话说赵孝成王初时接得赵括捷报,心中大喜,已后闻赵军困于长平,正欲商量遣兵救援,忽报:"赵括已死,赵军四十余万尽降于秦,被武安君一夜坑杀,止放二百四十人还赵."赵王大惊,群臣无不悚惧 ...
- 《东周列国志》第九十八回 质平原秦王索魏齐 败长平白起坑赵卒
话说须贾得命,连夜奔回大梁,来见魏王,述范睢吩咐之语,那送家眷是小事,要斩相国之头,干碍体面,难于启齿.魏王踌躇未决,魏齐闻知此信,弃了相印,连夜逃往赵国,依平原君赵胜去了.魏王乃大饰车马,将黄金百镒 ...
- [你必须知道的.NET]第二十五回:认识元数据和IL(中)
说在,开篇之前 书接上回[第二十四回:认识元数据和IL(上)],我们对PE文件.程序集.托管模块,这些概念与元数据.IL的关系进行了必要的铺垫,同时顺便熟悉了以ILDASM工具进行反编译的基本方法认知 ...
最新文章
- js生成[n,m]的随机数
- EditText显示明文与密码
- 教你从零开始使用wordpress做为后台生成小程序(小白版教程)
- 【WEB安全】In0ri:基于深度学习的网站内容污染检测系统
- 【白皮书下载】《追本数源•开启产品智能化时代》| 产品指数级增长手册
- 面向对象之继承与派生
- Datatables 构建响应式
- MIT陈刚教授案件新进展,律师反诉美检察官利用不实信息制造舆情、干扰司法公正...
- 聊聊并发编程的10个坑
- 辽宁工业大学有没有计算机专业,辽宁工业大学(专业学位)计算机技术考研难吗...
- ubuntu下字体美化设置
- VB键码常数(速查)
- Linux 命令(103)—— unzip 命令
- 1042 cant get hostname for your address
- CPU+GPU异构集群搭建的总结说明
- YACC(BISON)使用指南
- endnote中科大版区别_EndNote X7
- tumblr安装包Android,Tumblr安卓安装包
- 收到我的小心心了吗?
- 小鸟 java_java 飞翔小鸟源码
热门文章
- php 怎么更新浏览器缓存文件在哪里,PHP 设置动态网页在浏览器的缓存
- Pytorch使用tensorboardX可视化
- java虚拟机的gc机制的优缺点_深入Java虚拟机之 -- 总结面试篇
- android 布局图片缩放,Android中进行图片缩放显示
- C语言编写——四则运算小游戏
- java 日期计算类_日期类的加减及java中所以日期类的操作算法大全
- python import as 实例化_python中import list,dictionary常量在class实例化时遇到的坑
- error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'
- Firefox 将添加画中画功能
- 大型网站架构系列:负载均衡详解