



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WordLinux下进程间如何实现共享内存通信
这次我们来讲一下(Linux)进程(通信)中重要的通信方式:共享内存作为Linux软件开发攻城狮,进程间通信是必须熟练掌握的重要技能,而共享内存是在程序开发中常用的也是重要的一种进程间通信方式。
下面我们就来聊一聊Linux下进程间如何实现共享内存通信,有哪些方式?
1、基本概念
UNIX和Linux
UNIX和Linux是两种不同的(操作系统),它们的主要区别在以下几个方面:
历史:UNIX是最早的商业化操作系统之一,最初由贝尔实验室开发,而Linux则是由LinusTorvalds于1991年开发的开源操作系统。源代码:UNIX的源代码是私有的,需要购买授权才能使用和修改,而Linux是开源的,任何人都可以自由地访问、使用和修改其源代码。可移植性:由于UNIX的代码是私有的,因此它们在不同的(硬件)平台之间的可移植性较差。而Linux的源代码是开放的,因此它可以在多种硬件平台上运行。发行版:UNIX有多个商业和非商业版本,如Solaris、(AI)X、HP-UX等,每个版本都有自己的特点和功能。而Linux则有许多不同的发行版,如Ubuntu、Debian、RedHat、Fedora等。命令行工具:UNIX和Linux有许多相同的命令行工具和命令,如ls、grep、awk等,但也有一些不同之处。总的来说,UNIX和Linux都是基于UNIX哲学的操作系统,但它们在源代码、可移植性、发行版和命令行工具等方面有所不同。
SystemV和POSIX
SystemV和POSIX是两种不同的操作系统标准,它们的区别在以下几个方面:
历史背景:SystemV最初是由AT">#include#include#include#include#include#defineSHM_SIZE1024//共享内存大小intmain(){intshmid;char*shmaddr;chars8Re(ad)Buf[1024]={0};key_tkey=ftok(".",'s');//获取共享内存标识符if(key==-1){perror("ftok");exit(1);}//创建共享内存区域shmid=shmget(key,SHM_SIZE,IPC_CREAT|0666);if(shmid==-1){perror("shmget");exit(1);}//将共享内存区域附加到进程地址空间中shmaddr=shmat(shmid,NULL,0);if(shmaddr==(char*)-1){perror("shmat");exit(1);}#if1//在共享内存中写入数据strncpy(shmaddr,"Hello,world!",SHM_SIZE);#else//读数据//memcpy(s8ReadBuf,shmaddr,1024);//printf("s8ReadBuf:%s\\n",s8ReadBuf);#endif//分离共享内存区域if(shmdt(shmaddr)==-1){perror("shmdt");exit(1);}return0;}在上面的例程中,我们首先使用ftok()函数生成一个key值作为共享内存的标识符。然后使用shmget()函数创建共享内存区域,shmaddr指向共享内存区域的起始地址。最后使用shmdt()函数分离共享内存区域。
POSIXIPC机制实现共享内存
以下是一个使用POSIXIPC机制实现共享内存的简单例程,它展示了如何创建、映射和解除映射共享内存区域。
#include#include#include#include#include#include#defineSHM_SIZE1024//共享内存大小#defineSHM_NAME"/myshm"//共享内存名称intmain(){intfd;char*shmaddr;chars8ReadBuf[1024]={0};constchar*msg="Hello,world!";//创建共享内存区域fd=shm_open(SHM_NAME,O_CREAT|O_RDWR,0666);if(fd==-1){perror("shm_open");exit(1);}//调整共享内存区域的大小if(ftruncate(fd,SHM_SIZE)==-1){perror("ftruncate");exit(1);}//映射共享内存区域到进程地址空间中shmaddr=mmap(NULL,SHM_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);if(shmaddr==MAP_FAILED){perror("mmap");exit(1);}#if1//在共享内存中写入数据strncpy(shmaddr,msg,SHM_SIZE);#else//读数据//memcpy(s8ReadBuf,shmaddr,1024);//printf("s8ReadBuf:%s\\n",s8ReadBuf);#endif//解除共享内存区域与进程地址空间的映射关系if(munmap(shmaddr,SHM_SIZE)==-1){perror("munmap");exit(1);}//删除共享内存区域的文件名并释放资源if(shm_unlink(SHM_NAME)==-1){perror("shm_unlink");exit(1);}return0;}在上面的例程中,我们使用shm_open()函数创建一个共享内存区域,然后使用ftruncate()函数调整共享内存区域的大小。接着,我们使用mmap()函数将共享内存区域映射到进程地址空间中,并使用strncpy()函数在共享内存中写入数据。最后,我们使用munmap()函数解除共享
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淀粉在鞋材制造中的应用考核试卷
- 自动售货机行业市场驱动因素研究考核试卷
- 石英砂加工与石英玻璃制造考核试卷
- 四川省广安市华莹市2025年四下数学期末教学质量检测试题含解析
- 兰州工业学院《综合商务英语Ⅲ》2023-2024学年第一学期期末试卷
- 四川省巴中市平昌县2024-2025学年初三生物试题寒假周考试卷含解析
- 山东省济宁市曲阜师大附属实验校2025年初三5月百校联考物理试题含解析
- 吉林省四平市伊通县重点中学2024-2025学年第二学期初三数学试题期末教学质量(一模)监测卷含解析
- 湘赣十四校联考2024-2025学年高三下学期开学考试生物试题含解析
- 盘锦市重点中学2025年高三下学期阶段性考试(期末考)历史试题含解析
- 特变电工-财务报表分析课件
- 人民医院人才队伍建设规划人才队伍建设五年规划
- 一年级语文下册课件-21 小壁虎借尾巴24-部编版(15张PPT)
- 第四课:印巴战争
- 患者随访率低原因分析以及对策
- 油田相关业务的税制及税率
- 《国际经济法》案例思考题
- 乘法分配律练习题四年级
- 计量认证实验室程序文件(全套)
- DGC型瓦斯含量直接测定装置使用说明书
- 普通座式焊接变位机工装设计全套图纸
评论
0/150
提交评论