Linux - 进程间通信 - 匿名管道
一、概念:进程间通信( IPC,InterProcess Communication)
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进城之间要交换数据必须通过内核,
在内核中 开辟一块缓冲区进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内接提供的这种机制成为进程间
通信(IPC,InterProcess Communication)。
二、管道
管道分为匿名管道和命名管道,这里我们只讲匿名管道,命名管道的实现将在下一篇文章中分享。
1、管道是一种最基本的IPC机制,有pipe函数创建:
头文件#include <unistd.h>
函数原型:int pipe ( int fileds[2] );
返回值:调用成功返回0,调用失败返回-1.
调用pipe函数时,在内核中开辟一块缓冲区(称为管道),用于通信,他有一个读端一个写端,然后通过fileds参数传出给用户
程序两个文件描述符,fileds[0]指向管道的读端,fileds[1]指向管道的写端。所以管道在用户程序看起来就像一个打开的文件,通过
read(fileds[0]);或write(fileds[1])向这个文件读写数据,其实是在读写内核缓冲区。
2、管道实现进程间通信的过程:
Step1:父进程调用pipe开辟管道,得到两个文件描述符指向管道的读端和写端;
Step2:父进程调用fork函数创建子进程,那么子进程也有两个文件描述符指向同一管道的读端和写端;
Step3:父进程关闭管道读端,子进程关闭管道写端。父进程就可以网管道里写数据,子进程可以从管道中读数据,管道适用
缓刑队列实现的,数据从写端流入,从读端流出,这样就实现了进程间通信。
3、匿名管道的特点(简称管道):
(1)管道只支持单向通信。(要想父子进程间通信必须关闭相应的读、写端)
(2)管道用于具有亲戚关系的进程间通信,常用于父子进程间通信。(子进程继承父进程的文件描述符表,所以可以指向同一管道,看到同一份数据)
(3)管道依赖于文件系统。
(4)管道的生命周期随进程的结束而结束。
(5)面向字节流
(6)管道内部提供同步互斥机制
4、匿名管道的实现:
运行结果:
最新文章
- VC++ 一个简单的Log类
- 【转载】windows平台安装nodejs过程
- 专题:点滴Javascript
- 17 网络客户端编程 - 《Python 核心编程》
- Provider 错误 &#39;80004005&#39; 未指定的错误 /conn.asp,行 23
- 在Windows Azure上搭建SSTP VPN
- 对Native App与Web App的一些思考
- TCP基础知识
- Java基础—ClassLoader的理解(转)
- NS2 nam中节点及数据流颜色设置
- Android动画深入分析
- WCF错误远程服务器返回了意外响应: (413) Request Entity Too Large。解决方案
- JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
- English trip -- VC(情景课)4 C My feet hurt 我脚痛
- 利用Cocoapods创建基于SVN的私有库podspec
- java 框架 面试 2
- 并发编程-synchronized关键字大总结
- 出现错误日志:The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path
- robotframework+jenkins分布式执行自动化测试用例
- npm创建react项目