Linux进程间通讯.ppt

上传人:xin****828 文档编号:6289072 上传时间:2020-02-21 格式:PPT 页数:15 大小:352.37KB
返回 下载 相关 举报
Linux进程间通讯.ppt_第1页
第1页 / 共15页
Linux进程间通讯.ppt_第2页
第2页 / 共15页
Linux进程间通讯.ppt_第3页
第3页 / 共15页
点击查看更多>>
资源描述
Linux进程间通讯 LinuxIPC概述 信号 signal 亲缘进程和非亲缘进程都可以 也可以进程自己给自己递送信号 信号量 semaphore 主要是线程间和亲缘进程间的同步手段 不做数据传输之用 命名信号量 可以在非亲缘进程间使用 管道 只允许亲缘进程间的通讯 命名管道 FIFO 除了亲缘进程可以通讯外 非亲缘进程也可以通讯 LinuxIPC概述 共享内存 多个进程可以访问同一块内存空间 是最快的IPC方式 在进程间传递数据时无须任何内存的拷贝 套接字 最通用的进程间通讯方式 它提供了一种让不同机器上进程间通讯方式 管道 管道是半双工的 当需要双向通讯时 需要两个管道 只能用于父子进程和兄弟进程等有亲缘关系的进程 数据写入时 放在管道的结尾 数据读取时 从管道的头开始读取 管道 includeintpipe intpipefd 2 pipe用来创建一个管道 这个管道用于父子进程间的通讯 pipefd 0 是管道的读端 pipefd 1 是管道的写端 由于管道是单向的 所有一个进程需要关闭写端或者读端 写端不存在时 读端会收到文件结束符 读端不存在时 写端会收到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控制共享内存 其中shmctl shmid IPC RMID 0 用来从系统中移除共享内存 作业 创建两个进程A和B A进程产生一些数据后传递给B进程 B进程读取这些数据并显示 A和B的同步机制可以采用信号 如SIGUSR1
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!