一、概念:进程间通信( 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、匿名管道的实现:

运行结果:

最新文章

  1. VC++ 一个简单的Log类
  2. 【转载】windows平台安装nodejs过程
  3. 专题:点滴Javascript
  4. 17 网络客户端编程 - 《Python 核心编程》
  5. Provider 错误 &#39;80004005&#39; 未指定的错误 /conn.asp,行 23
  6. 在Windows Azure上搭建SSTP VPN
  7. 对Native App与Web App的一些思考
  8. TCP基础知识
  9. Java基础—ClassLoader的理解(转)
  10. NS2 nam中节点及数据流颜色设置
  11. Android动画深入分析
  12. WCF错误远程服务器返回了意外响应: (413) Request Entity Too Large。解决方案
  13. JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
  14. English trip -- VC(情景课)4 C My feet hurt 我脚痛
  15. 利用Cocoapods创建基于SVN的私有库podspec
  16. java 框架 面试 2
  17. 并发编程-synchronized关键字大总结
  18. 出现错误日志:The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path
  19. robotframework+jenkins分布式执行自动化测试用例
  20. npm创建react项目

热门文章

  1. Struts2学习笔记⑥
  2. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
  3. VueJs学习路线
  4. TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个
  5. Java引领新生活
  6. Android使用Aspectj
  7. JavaScript高级程序设计(学习)
  8. 浩哥解析MyBatis源码(一)——执行流程
  9. python多线程学习笔记(超详细)
  10. libcrypto.so.1.0.0内容丢失导致sshd无法运行解决方案