进程间通信(匿名管道)
1.进程通信的目的
(1) 数据传输: 一个进程需要将它的数据传输给另一个进程
(2) 资源共享: 多个进程之间共享同样的资源
(3) 通知事件: 一个进程需要向另一个或一组进程发送消息, 通知它们发生了什么事情
2.管道
管道是一种进程之间通信的一种方式, 我们把从一个进程连接到另一个进程的数据流叫做管道
3.匿名管道
(1) 匿名管道的创建
int pipe(int fd[2]);
fd是一个文件描述符数组, fd[0] 代表读端, fd[1] 代表写端
返回值:成功过时返回0, 失败时返回错误代码
4.代码演示
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<error.h>
#include<stdlib.h>int main()
{int fd[2];int pip = pipe(fd);if(pip == -1){perror("pipe");exit(1);}pid_t id = fork();if(id == -1){perror("fork");exit(1);}if(id == 0){close(fd[0]);write(fd[1], "hello", 5);close(fd[1]);exit(0);}close(fd[1]);char buf[100];int len = read(fd[0], buf, strlen(buf));if(len == -1){perror("read");exit(1);}printf("%s\n", buf);return 0;
}
5.站在文件描述符角度理解
6.匿名管道的特点
(1) 单向
(2) 有血缘关系的进程才能通信
(3) 同步互斥机制(管道没有数据了就不读了, 管道满了就不能写了)
(4) 进程退出管道释放,管道的生命周期随进程
(5) 管道提供面向字节流的服务
7.几个名词概念
(1) 字节流: 由上层决定, 一次读多少不确定
(2) 数据不一致: 一个进程读, 另一个进程写
(3) 临界区: 两个进程访问临界资源的那段代码叫做临界区
(4) 互斥: 在任何一个时间点临界区访问临界资源时只允许一个进程访问
(5) 访问资源的原子性: 进程在操作某些资源时要么不做, 要么做完,中间不会被打扰
(6) 同步: 以相对比较安全的顺序访问资源,这种安全性叫同步(为了防止饥饿现象)
(7) 管道自带互斥和同步, 当管道里无数据时, 父进程会等子进程退出
8.管道满的时候
(1) 所有管道写端对应的文件描述符被关闭时, 则read返回0
(2) 如果所有文件描述符读端对应文件描述符被关闭时, 则write 操作会产生一个SIGPIPE, 进而可能导致write进程退出
(3) 当要写的数据不大于PIPE_BUF时(4096), Linux将保证写入的原子性
(4) 当写的数据大于PIPE_BUF时, Linux将不再保证写入的原子性
进程间通信(匿名管道)相关推荐
- 进程间通信 - 匿名管道实现
引子 前面的两篇博文分别介绍了通过剪贴板和通过邮槽来实现进程之间的通信, 其中剪贴板呢,是用来实现本地两个进程之间的通信, 而邮槽则既可以实现本地两个进程之间的通信,也可以实现本地进程和服务器进程的通 ...
- 【Linux】进程间通信 —— 匿名管道 | 命名管道 | System V | 消息队列 | 共享内存
进程间通信 0. 进程间通信 1. 管道 1.1 匿名管道 1.1.1 匿名管道原理 1.1.2 创建匿名管道pipe 1.1.3 基于匿名管道通信的4种情况5个特点 1.2 命名管道 1.2.1 创 ...
- 进程间通信——匿名管道
使用匿名管道做进程通信,需要用父进程创建一个子进程,该子进程的标准输入输出句柄由父进程指定. 无论父进程还是子进程,都可以收发数据,这里仅演示父进程发数据,子进程打印数据. 父进程循环从控制台读数据, ...
- 进程间通信(7) “剪贴板“、“匿名管道“、“命名管道“、“邮槽“4种方式总结
1. 剪贴板和匿名管道只能同一-台机器上 命名管道和邮槽还可以实现跨网络的进程间通信; 邮槽是基于广播通信的,可以一对多的单向通信, 数据量较小,通常都是在424字节以下 命名管道只能点对点的单一的通 ...
- Linux系统编程27:进程间通信之管道的基本概念和匿名管道与命名管道及管道特性
文章目录 (1)管道是什么 (2)匿名管道 A:读端和写端 B:建立匿名管道的函数 C:最简单的进程间通信-演示 D:管道四大特性 E:管道的特点 F:从内核角度理解管道 G:管道总结 (3)命名管道 ...
- 进程间通信(匿名管道、命名管道、共享内存)
进程间通信 进程间通信的作用 管道 匿名管道 命令感受匿名管道 从内核角度去解释匿名管道 代码创建匿名管道 从PCB角度去分析匿名管道 匿名管道的非阻塞读写特性 创建管道,获取管道读写两端文件描述符的 ...
- Linux:进程间通信(创建匿名管道,父子进程间通信,兄弟进程间通信)
过一遍管道的基础知识: 1.本质:存在于高速缓存区,属于伪文件,不占用磁盘空间.缓冲区大小默认4K,可根据实际情况适当调整 2.读端和写端各自对应一个文件描述符,数据从写端流入,读端流出 3.操作管道 ...
- #Linux#进程间通信# 管道(pipe)-匿名管道pipe
我们通常把一个进程连接到另一个进程的一个数据流称为一个"管道",通常是用作把一个进程的输出通过管道连接到另一个进程的输入.管道本质上是内核的一块缓存.内核使用环形队列机制,借助内核 ...
- 【Linux】进程间通信--管道(匿名管道和命名管道)
文章目录 前言 进程间通信的目的 管道 匿名管道 管道特点 站在文件描述符角度理解管道 匿名管道通信读写特点 命名管道 命名管道的原理 命名管道的创建 命名管道完成两个不同进程通信 匿名管道和命名管道 ...
最新文章
- 数据库被黑后留下的数据
- C语言函数题- 删除字符串中下标为i的字符
- 【渝粤题库】陕西师范大学202891 基于web的程序设计
- 基于keepalived 实现VIP转移,lvs,nginx的高可用
- 初学python有几个阶段_零基础如何系统的学习Python 从7个阶段入手
- 打印图形(内测第1届第1题)
- 梯度下降(一)--机器学习
- delphi linux arm_诺基亚N900搭载完整linux系统的小众智能手机
- 代码对比工具,就用这7个!
- 【腾讯笔试题】记腾讯2019年暑假实习移动端开发在线笔试题
- 图像_camera_基础知识_YUV色彩模型与RGB色彩模型详解
- Access数据库修复 压缩
- 怎么清除U盘病毒的简单步骤
- 忘了neo4j密码怎么办
- 对比分析高速传输和同步软件:Aspera 与 镭速(Raysync)
- win7 精简板 安装ardunio uno r3驱动
- otc焊接机器人编程模拟软件_otc焊接机器人编程
- 黑客界的半壁江山?中国兵团韩国战记
- Elixir - Map
- java unsafe park_java – Unsafe.park vs Object.wait
热门文章
- XML反序列化出错,XML 文档(2, 2)中有错误
- linux常用命令-压缩解压命令
- node.js基础:数据存储
- 去除aspx生成的页面最开始的空行
- linux中查看相关日志记录,linux重启查看日志及历史记录 查询原因
- thinkphp mysql 更新_THINKPHP5修改数据库数据出现“缺少更新条件”的错误
- java调用外联服务用xml,Spring IOC 依赖注入的两种方式:XML和注解
- 一维二维_更高效的一维、二维材料过渡态搜索
- 计算机专业学生求职信500字,计算机专业求职信500字范文
- 煮饭的机器人作文_公示|“笔随我心、心由笔动”作文大赛获奖名单