




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux进程间通讯,LinuxIPC概述,信号(signal):亲缘进程和非亲缘进程都可以,也可以进程自己给自己递送信号。信号量(semaphore):主要是线程间和亲缘进程间的同步手段,不做数据传输之用。命名信号量:可以在非亲缘进程间使用。管道:只允许亲缘进程间的通讯。命名管道(FIFO):除了亲缘进程可以通讯外,非亲缘进程也可以通讯。,LinuxIPC概述,共享内存:多个进程可以访问同一块内存空间,是最快的IPC方式。在进程间传递数据时无须任何内存的拷贝。套接字:最通用的进程间通讯方式,它提供了一种让不同机器上进程间通讯方式。,管道,管道是半双工的,当需要双向通讯时,需要两个管道。只能用于父子进程和兄弟进程等有亲缘关系的进程。数据写入时,放在管道的结尾。数据读取时,从管道的头开始读取。,管道,#includeintpipe(intpipefd2);pipe用来创建一个管道,这个管道用于父子进程间的通讯。pipefd0是管道的读端,pipefd1是管道的写端。由于管道是单向的,所有一个进程需要关闭写端或者读端。写端不存在时,读端会收到文件结束符。读端不存在时,写端会收到SIGPIPE信号。成功返回0,失败返回-1.缺点:只能用于亲缘进程间通讯。,命名管道(FIFO),命名管道可以在所有进程间使用,克服了管道只能在亲缘进程通讯的限制。命名管道与一个路径名相关联,以文件的形式存在于文件系统中。只要能访问该文件的进程就可以使用命名管道。命名管道也是先进先出,虽然以文件形式实现单不支持seek等操作。,创建FIFO,#include#includeintmkfifo(constchar*pathname,mode_tmode)第一个参数为路径名,第二个为创建类型。跟create函数的参数一样。进程只要打开这个文件,就可以往这个文件读和写。当多个进程往fifo里写时,linux只保证PIPE_BUF大小的字节数是原子的。成功返回0,失败返回-1。,popen,#includeFILE*popen(constchar*command,constchar*type);intpclose(FILE*stream);popen的作用相当于创建一个管道,然后再fork一个子进程,最后执行命令。根据命令的不同这个管道是读的或者写的。失败返回NULL,共享内存,共享内存是操作系统把同一块物理内存映射到不同进程的地址空间。效率高,无须拷贝。多个进程可以自由读写共享内存,所以需要同步机制。mmapshmget、shmat、shmdt、shmctl,mmap,void*mmap(void*addr,size_tlen,intprot,intflags,intfd,off_toffset)mmap在进程地址空间创建一个映射。它既可以把一个文件映射到内存,也可以映射一块内存,实现进程间内存共享。addr为共享内存的起始地址,为NULL时,内核会自动选择一个起始地址。length为共享内存的长度。prot指明了共享内存保护状态:PROT_EXEC,PROT_READ,PROT_WRITE,PROT_NONEflagsMAP_SHARED共享此内存,MAP_PRIVATE只有该进程可见。MAP_ANONYMOUS为匿名映射。,系统v共享内存,有内核维护共享内存共享内存一旦建立,一直保留在系统中。直到系统重启或者共享内存被移除。ipcs命令可以查看共享内存,信号量等。,系统v共享内存,#include#include#includeintshmget(key_tkey,size_tsize,intshmflg);void*shmat(intshmid,constvoid*shmaddr,intshmflg);intshmdt(constvoid*shmaddr);intshmctl(intshmid,intcmd,structshmid_ds*buf);key_tftok(constchar*pathname,intproj_id);ftok生成一个key,作为shmget的第一个参数。pathname必须为调用进程可以访问的。proj_id的低8bit有效。pathname和proj_id共同组成一个key。,系统v共享内存,shmget用来获取指定size的共享内存。第一个参数用来标识共享内存,第二个参数为共享内存的大小,第三个参数shmflg有IPC_CREAT和IPC_EXCL,最为重要的是在shmflg中指明访问权限,跟open的mode参数一样。否则会出现permissiondenied等错误。失败返回-1。,系统v共享内存,shmat把共享内存映射到进程空间。第一个参数为shmget的返回值,第二个参数可以为NULL,意味着有内核来选择映射的地址,第三个为映射到进程空间时共享内存的权限。shmdt解除进程对共享内存的映射。shmctl控制共享内存。其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卓顶精文-店铺承包转让合同5篇
- 2025年招标采购从业人员专业技术能力考试(招标采购项目管理中级)冲刺试题及答案(山西阳泉)
- 江西省鹰潭市招标采购从业人员专业技术能力考试(招标采购合同管理中级)测试题库及答案(2025年)
- 《童心童画》课件
- 隔离防护总结汇报
- 食管癌护理说课
- 2025年签订的违章建筑房屋租赁合同是否有效
- 广告公司股东合作协议5篇
- 公司月度安全培训记录内容课件
- 2025年被迫解除劳动合同样本
- 黄旭华人物介绍
- 《医疗机构工作人员廉洁从业九项准则》解读
- 教育行业重难点分析及解决措施
- 合伙开工厂 合同范例
- 万达2024年连锁商业体合作伙伴协议3篇
- 警察进小学校园讲安全教育
- 蒸汽管道保温合同范例
- 棋牌室消防应急预案
- 【MOOC】实验室安全学-武汉理工大学 中国大学慕课MOOC答案
- 人防工程知识培训
- 车位租赁协议
评论
0/150
提交评论