进程间通信(一)(管道文件操作)
进程间通信
原理:系统为进程间提供公共传输媒介实现公共访问进而实现通信
通信方式:管道,共享内存,消息队列,信号量
管道
特性:半双工通信 (可选择方向的单向通信)
本质:系统内核中的一块缓冲区(内核空间中开辟的一块内存)
通信原理:多进程只要能够访问同一块内核中的缓冲区(管道)就能实现通信
分类:匿名管道 命名管道
- 匿名管道:(无标识符,无法被其他进程找到)只能用于具有亲缘关系的进程间通信
无标识符,无法被其他进程找到,只能通过子进程复制父进程的方式获取管道的操作句柄,进行通信
int pipe(int pipefd[2]); 把管道操作当做一个文件操作,通过IO操作完成对管道的操作
pipefd[0] ->用于从管道读数据
pipefd[1] ->用于向管道写数据
返回值:成功 0 失败-1
管道读写特性:(匿名与命名特性类似)
- 如果管道中没有数据,read会阻塞等待数据写入;
- 如果管道数据满了,则write会阻塞
- 如果管道的所有读端被关闭了,则继续write就会触发异常,导致进程退出
- 如果管道的所有写端被关闭了,则read读完管道中所有数据,则不在阻塞,返回0
管道符:| 连接两个命令,将前面命令要输出到标准输出的结果,不再输出到标准输出,而是将这个结果传输到后面命令的进程 (将前面命令结果交给后面命令处理)
ps -ef | grep pipe
- 创建管道
- 创建两个进程,在各自进程中进行程序替换
- 程序替换之前,ps进程应该将标准输出重定向到管道写入端。grep进程应该标准输入重定向到管道读取端
- 父进程等到子进程退出
代码示例如下:
- 命名管道:(有标识符)用于同一主机上任意进程间通信
创建一个管道文件:mkfifo 管道文件名 标识符可见于文件系统的管道类型文件,实质上任然是内核中的一块缓冲区
int mkfifo(char* path,int chmod)
代码示例如下:
- fiforead
- fifowrite
测试结果如下:
综上总结:
本质:内核中的一块缓冲区,多个进程通过访问同一缓冲区实现通信
分类:
匿名管道:没有标识符,亲缘关系间通信,比如,只能通过子进程复制父进程的方式获取操作句柄
命名管道:标识符就是创建的管道文件,通过打开同一个管道文件访问同一个缓冲区
特性:
- 半双工通信 可以选择方向的单向通信
- 管道提供字节流传输服务:有序的,基于连接的,可靠地连接方式
基于连接:所有读端被关闭,则write触发异常,所有写端被关闭则read读完数据返回0,不再阻塞
- 管道自带同步与互斥
互斥:通过保证同一时间对临界资源(公共缓冲区,即管道)的唯一访问保证操作的安全性
同步:通过某种条件判断,实现对资源访问获取的有序合理性
互斥的具体体现:对管道进行写操作时写入数据大小不超过PIPE_BUF默认4096字节,则保证操作的原子性(原子性即不可再分割)
同步的具体体现:若管道中没有数据则read阻塞,若管道中数据满了则write阻塞
- 管道生命周期随进程
进程间通信(一)(管道文件操作)相关推荐
- (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)
文章目录 一:什么是进程通信 二:如何实现进程间通信及其分类 三:通信方式1-共享存储(共享内存) (1)课本基础内容 (2)补充-Linux中的进程通信 四:通信方式2-管道 (1)管道是什么 (2 ...
- linux文件目录和属性知识,Linux文件和目录属性
文件和目录属性 #ls -l 查看当前目录下的文件 如: drwxr-xr-x 2 root root 4096 12月 4 20:31 111 -rw-r--r-- 1 root root ...
- linux c语言 ppt,linux操作系统下c语言编程入门.ppt
linux操作系统下c语言编程入门.ppt Linux操作系统下C语言编程入门 CNT Linux操作系统简介基础知识进程介绍文件操作时间概念消息管理线程操作网络编程Linux下C开发工具介绍 一 L ...
- TCP/IP 网络编程 (三)
server端未处理高并发请求通常採用例如以下方式: 多进程:通过创建多个进程提供服务 多路复用:通过捆绑并统一管理 I/O 对象提供服务 多线程:通过生成和客户端等量的线程提供服务 多进程serve ...
- 嵌入式Linux入门11:应用层编程应用和分类
本文针对Linux系统环境应用层的编程应用做一个概述. 有的人把Linux底层和应用层严格区分对待,在一定程度上是没有错误的.但很多时候需要进行交叉学习.比如,编写了底层驱动程序,如何验证这个驱动能正 ...
- Torch7系列教程之Torch深度学习库教程(一)
Torch7深度学习库教程 写在前面的话 torch库 1 Tensor库 1.1 Tensor数据使用简介 1.2 Tensor构造函数 1.3 作用于Torch上的一些操作函数 2 Storage ...
- Windows程序设计最新书籍教程
<深入浅出Windows API程序设计:编程基础篇> 出版社:人民邮电出版社 书号:978-7-115-56948-6 出版时间:2022-05-01 ◆ 基础篇的内容是学习Window ...
- 人工智能专业基础课程
计算机系统基础(一):程序的表示.转换与链接 课程大纲 01 第一周 计算机系统概述 课时 第1讲 为什么要学习计算机系统基础 第2讲 计算机系统基本组成与基本功能 ...
- linux 有名管道FIFO
linux文件主要有4种:普通文件.目录文件.设备文件(字符设备文件/块设备文件).管道文件 管道文件(p表示管道文件) [redhat@localhost tmp]$ mkfifo fifo [re ...
最新文章
- php7 mysql 卡顿_不要在PHP7中踩这些坑
- python银行排队系统_socket实现银行排队系统
- Nacos配置中心介绍
- 最大数max(x,y,z)(信息学奥赛一本通-T1152)
- be my friend
- java里面object和string的相互转换
- C#随机不重复给数组赋值1-100并排序
- java 集合中对象的排序 和去重
- Python 标准库—— datetime(运行时间的判断)
- 十大OpenGL教程
- BoundsChecker下载
- IE插件加载问题调试
- Markdown 插入视频
- 组会 | RELAXLOSS: DEFENDING MEMBERSHIP INFERENCE ATTACKS WITHOUT LOSING UTILITY
- java排序接口ComparableT 的实现与使用
- matlab图像处理学习笔记
- 搭建一个完整的实时日志统计平台
- 记录chrome 浏览器 本地ip 地址报 CORS 错误
- mysql 2038年问题_64位Ubuntu系统的时间戳,2038年问题
- SCAN: learning to classify images without labels 阅读笔记
热门文章
- 修改SqlServer数据库服务器的端口号和连接字符串
- java制作网易邮箱登录页面_Page Object实例(一) - Java + Selenium 登录163邮箱
- 奥鹏刷分软件_【奥鹏在线作业自动答案软件和中国大学mooc刷课系统哪个好用】奥鹏在线作业自动答案软件和中国大学mooc刷课系统对比-ZOL下载...
- html 无效,如何让css失效?
- 【数据结构与算法】查找波峰或者波谷
- esxi时区设置 +8_Shopify篇:Goolge Analystic申请及设置
- Delta与XML相互转换
- 视图、存储过程、触发器讲解
- 教师计算机水平怎么评价,信息技术教师的应用能力评价
- 【计算情与思】扫地僧、打字员、信息恐慌与奥本海默