应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

系统调用mmapSystemV共享内存区

  一,概述
  系统调用mmap通过映射一个普通文件实现共享内存。SystemV则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应特殊文件系统shm中的一个文件。执行过程是先调用shmget,再调用shmat。对于每个共享的内存区,内核维护如下的信息结构,定义在头文件中。structshmidds{structipcpermshmperm;operationpermsintshmsegsz;sizeofsegment(bytes)timetshmatime;lastattachtimetimetshmdtime;lastdetachtimetimetshmctime;lastchangetimeunsignedshortshmcpid;pidofcreatorunsignedshortshmlpid;pidoflastoperatorshortshmnattch;no。ofcurrentattachesthefollowingareprivateunsignedshortshmnpages;sizeofsegment(pages)unsignedlongshmpages;arrayofptrstoframesSHMMAXstructvmareastructattaches;descriptorsforattaches};二、SystemV共享内存区API
  使用共享内存的流程:1。进程必须首先分配它。2。随后需要访问这个共享内存块的每一个进程都必须将这个共享内存块绑定到自己的地址空间中。3。当完成通信之后,所有进程都将脱离共享内存,并且由一个进程释放该共享内存块。includesysipc。hincludesysshm。h创建一个新的内存共享区或者访问一个已经存在的共享内存区返回共享内存区标识符intshmget(keytkey,sizetsize,intshmflg);创建或打开一个共享内存区后,调用shmat把它连接到调用进程的地址空间voidshmat(intshmid,constvoidshmaddr,intshmflg);当一个进程完成某个共享内存区的使用时,调用shmdt断开这个内存区intshmdt(constvoidshmaddr);对内存区进行多种操作cmd取值:IPCRMID:从系统中删除由shmid标识的共享内存区并拆除它IPCSET:给指定的共享内存区设置其shmidds结果成员IPCSTAT:通过buff参数向调用者返回所指定共享内存区当前的shmidds结构intshmctl(intshmid,intcmd,structshmiddsbuf);
  调用SystemVAPI编写程序进行测试:
  程序1:调用shmget函数使用指定的路径名和长度创建一个共享内存区,程序如下:includestdio。hincludestdlib。hincludeunistd。hincludesysshm。hincludefcntl。hdefineSVSHMMODE(SHMRSHMWSHMR3SHMR6)intmain(intargc,charargv〔〕){intc,id,oflag;charptr;sizetlength;oflagSVSHMMODEIPCCREAT;while((cgetopt(argc,argv,e))!1){switch(c){casee:oflagOEXCL;break;}}if(optind!argc2){printf(usage:shmget〔e〕pathnamelength。);exit(0);}lengthatoi(argv〔optind1〕);创建由用户指定其名字和大小的共享内存区idshmget(ftok(argv〔optind〕,0),length,oflag);把该内存区连接到当前进程的地址空间ptrshmat(id,NULL,0);exit(0);}
  程序2:调用shmctl指定IPCRMID命令,从系统中删除一个共享内存区,程序如下:includestdio。hincludestdlib。hincludeunistd。hincludesysshm。hdefineSVSHMMODE(SHMRSHMWSHMR3SHMR6)intmain(intargc,charargv〔〕){intid;if(argc!2){printf(usage:shmrmidpathname);exit(0);}打开共享内存区idshmget(ftok(argv〔1〕,0),0,SVSHMMODE);从系统中删除由id标识的共享内存区shmctl(id,IPCRMID,NULL);exit(0);}
  程序3:往共享内存区中写入一个模式,调用shmctl指定IPCSTAT命令格式,程序如下:includestdio。hincludestdlib。hincludeunistd。hincludesysshm。hincludefcntl。hdefineSVSHMMODE(SHMRSHMWSHMR3SHMR6)intmain(intargc,charargv〔〕){inti,id;structshmiddsbuff;unsignedcharptr;if(argc!2){printf(usage:shmwritepathname。);exit(0);}idshmget(ftok(argv〔1〕,0),0,SVSHMMODE);ptrshmat(id,NULL,0);shmctl(id,IPCSTAT,buff);获取共享内存区大小for(i0;ibuff。shmsegsz;i)ptri256;exit(0);}
  程序4:从共享内存中读出模式,程序如下:includestdio。hincludestdlib。hincludeunistd。hincludesysshm。hincludefcntl。hdefineSVSHMMODE(SHMRSHMWSHMR3SHMR6)intmain(intargc,charargv〔〕){inti,id;structshmiddsbuff;unsignedcharc,ptr;if(argc!2){printf(usage:shmreadpathname。);exit(0);}idshmget(ftok(argv〔1〕,0),0,SVSHMMODE);ptrshmat(id,NULL,0);shmctl(id,IPCSTAT,buff);for(i0;ibuff。shmsegsz;i){cptr;printf(ptr〔d〕d,i,c);}exit(0);}三,SystemV与Posix共享内存区
  二者的差别是:
  (1)Posix共享内存区是先调用shmopen然后再调用mmap,SystemV共享内存区是先调用shmget再调用shmat。
  (2)Posix共享内存区对象的大小可在任何时刻通过ftruncate修改,而SystemV共享内存区对象的大小是在调用shmget创建时固定下来的。
  更多Linux内核视频教程文档资料免费领取后台私信【内核】自行获取。

为什么很多人不喜欢听大道理?人们不喜欢听大道理,可能有几个常见的原因:首先,大道理通常过于抽象或概括,难以直接应用到具体的生活情境中。人们更喜欢听实用性更强、能够解决他们具体问题的建议和建议。……避孕药可以长期吃吗?关爱女性健康避孕药不能长期吃吗?何志晖主任,广医一院妇产科。其实严格来讲,是紧急避孕药不能长期吃。而短效避孕药根据不同的情况可以长期吃,但是需要定期复查肝功能。对于年龄超过35岁,有……内斗升级!宝宝树CFO举报公司及复星系造假上市,多方回应母婴社区电商平台宝宝树(01761。HK)高层内斗升级。4月11日,宝宝树发布公告称,因董事会对首席财务官徐翀表现并不满意,决定免除其董事、首席财务官、薪酬委员会成员等一……订单暴增!价格大涨!五一小长假,福州租车市场火爆今年的五一小假期即将到来,作为乙类乙管后的首个黄金周,市民的旅游热情高涨。在旅游市场火热的背景下,团队游、家庭游、个人游等多种形式成为市民出游首选,车辆租赁也成为交通出行……刘晓庆怎么啦?看到刘晓庆这张相片,让我想到一个词:一日不见,如隔三秋。可当我看到刘晓庆这张相片时,如隔三十秋都不止,却恍若隔世。因为她的形象在我的脑海里,从来只有年轻貌美,一个人生不怕从头再……AutoGPT全自动的人工智能助手让GPT4为你实现一切!随着人工智能技术的飞速发展,GPT4作为强大的人工智能语言模型成为了众多应用场景的核心。今天,我们将为你揭秘一款具有革命性意义的GPT4应用Aut……欧联杯3葡萄牙体育点球大战爆冷出局北京时间3月17日凌晨4点,202223赛季欧联杯18决赛次回合一场焦点战在伦敦酋长球场进行,英超豪门阿森纳主场迎战葡萄牙劲旅葡萄牙体育。上半场,扎卡破门为阿森纳取得领先;下半……东用科技路由器连接上云助手配置指导手册一、上云助手操作步骤1。安装Devicecontrolcenter并启动。2。点击服务器设置后设置端口号:165535,传输协议:TCPUDP。路由推送功能默……Woj莫兰特在参加咨询项目时没打过球预计复出日期将延长直播吧3月16日讯今日,NBA官方宣布,灰熊球星莫兰特将被停薪禁赛8场。最快能在21日对阵独行侠的比赛中复出。名记Woj报道称,消息人士透露,此前在佛罗里达州参加心理咨询……参观军垦博物馆博物馆奇遇记第一次去没进去,人家必须要身份证,人家问预约了没,我说预约了,其实是假的,成功蒙混过去,但是最后要身份证,人脸识别,过不去了。第二次是拔拔完智齿和我朋友……京媒名记欧冠抽签绝不搞猫腻!北京国安创造历史,成最大赢家v202223赛季的欧冠14决赛和欧联杯14决赛完整对阵出炉,京媒名记犀利点评!元叻:可能除了安切洛蒂,没有谁会觉得四分之一决赛的对手很强吧!14决赛,国米vs本菲卡,看好施密特……我国成功发射高分十三号02星3月17日16时33分,我国在西昌卫星发射中心使用长征三号乙运载火箭,成功将高分十三号02星发射升空,卫星顺利进入预定轨道,发射任务获得圆满成功。新华社发(应龙飞摄)3月……
壁挂式洗衣机是真好用,家里有宝宝的快安排上壁挂式洗衣你们家宝宝的衣服是跟大人一起洗还是分开洗。自从怀孕之后送给宝宝的第一件礼物,就是给她买了这款海尔的壁挂洗衣机。毕竟宝宝的皮肤娇嫩,细节一定要注意。像家里有孩子的都可以用它来洗。……谐音迷信里父母的爱小时候我们对大人说腰疼时,大人们就说我们没有腰。这是因为很多父母认为腰与夭同音,听起来很不吉利,于是就自动屏蔽了。另外,从中医学角度来讲,腰指的就是肾脏,但这可不是说小孩子没有……养一个青春期的孩子会怎样?来自更年期妈妈的心声我们常说青春期遇上更年期,大概就是我和女儿这种情况了。这几日放假和娃相处,感触尤为深刻。如果正常读书、恋爱、结婚、生子,基本上等到孩子上中学的父母都奔入40了,这就……税收在取的这一头始终饱含民生温度央视网消息:现在,社会各界对税收越来越关注了,大家关心交了多少税,也关心交的税用到了什么地方。来自一线的税务人全国政协委员、江西省税务局党委书记、局长范扎根,在委员通道上,为大……强信心稳经济促发展灵台加大招商力度做强蔬菜产业来源:【新甘肃】【强信心稳经济促发展】灵台加大招商力度做强蔬菜产业新甘肃甘肃日报记者田丽媛通讯员景洁近日,走进位于灵台县中台镇坷台村的津甘共建产业园灵台……人活一辈子,什么最重要?(看完就懂了)文飞鱼01hr有一句话说得好,有什么都别有病,没什么都别没钱。人这辈子,若是得病,就会饱受痛苦,什么都干不了。若是没钱,日子也不过好,甚至连生病了都没钱医治,更是难……头发细软?不精神?改变完年轻10岁天津男生发型设计电视剧同款发型虽然好看,但是发型还是要适合自己才好。有什么想法,给我搞个高启强的发型。高后强的发型?对啊!搞完之后我再深刻研究一下《孙子兵法》。兄弟你这,我感觉你不太适合那种感……印尼消费疲弱拖累经济前景3月16日,在印度尼西亚雅加达国际会展中心,参会者在第三届中国(印尼)贸易博览会上了解商品。新华社记者徐钦摄印度尼西亚中央统计局近日公布的数据显示,3月份月通胀率为0。1……欢迎回家!致敬中国航天太空出差6个月远征星辰大海今天任务完成刚刚太空三人组翟志刚、王亚平、叶光富重返地球4月16日0时44分神舟十三号载人飞船与……WTT新乡冠军赛陈幸同顺利晋级马龙遗憾出局中新社新乡4月11日电(记者郝凌宇)11日,世界乒乓球职业大联盟(WTT)新乡冠军赛在新乡市平原体育中心继续进行。最后一位亮相的国乒选手陈幸同战胜日本小将木原美悠晋级。马龙在男……塞尔达传说王国之泪大量周边情报公布会发光的大师之剑《塞尔达传说:王国之泪》最终预告片已在昨晚正式公布,现在任天堂也发布了《塞尔达传说:王国之泪》的一些周边情报,任天堂的官方周边将与游戏一同推出(5月12日),内容包括了主题T恤……基金经理纷纷开启下半场,私募注册地扎堆海岛宁波市北仑区,三面环海,碧波荡漾。清明节前,在阔别了长达7年之久的银华基金后,刘一隆将与合伙人一起创立的私募基金的注册地,放在这个春暖花开的地方。与他一起搭伙创业的……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网