码迷,mamicode.com
首页 > 系统相关 > 详细

进程间通信---管道

时间:2016-07-17 18:10:01      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:管道

  每个进程各自有着不同的用户地址空间,任何一个进程的全局变量在另一个进程中是看不到的,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2在从内核中把数据读走,内核提供的这种机制称为进程间通信。

进程间通信的本质:让不同的进程看到同一份系统资源。


进程通信方式:管道(pipe)


pipe函数:

#include <unistd.h>
int pipe(int fd[2]);

调用pipe函数时在内核中开辟一块缓冲区(管道)用于通信,它有一个读端一个写端,通过fd[2]参数传出给用户程序两个文件描述符,fd[0]指向管道的读端,fd[1]指向管道的写端。管道在用户程序看起来就像一个打开的文件。向文件读数据其实就是在读内核缓冲区。


开辟管道之后如何实现两个进程间的通信呢?

技术分享

注:文件描述符0,1,2分别表示标准输入,标准输出,标准错误。


过程描述:父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端,父进程调用fork函数创建子进程,子进程也有两个文件描述符指向同一管道。父进程关闭管道读端,子进程关闭写端。父进程可以往管道中写,子进程可以从管道中读,管道是用环形队列实现,数据从写端流入从读端流出,从而实现进程间通信。


特征:

(1)文件描述符表会被子进程继承下去

(2)管道依赖文件系统,允许具有血缘关系的进程,常用于父子进程。

(3)管道只允许进行单向通信。要想进行双向,需创建两个管道

(4)管道面向字节流的数据传输符

(5)管道随进程。即进程在管道在,进程消失管道消失。


测该系统的管道容量。

思路:一直写,不关闭读,当管道被写满时,写被操作系统终止

技术分享

测试结果:

技术分享


本文出自 “一起去看星星” 博客,请务必保留此出处http://10810429.blog.51cto.com/10800429/1827135

进程间通信---管道

标签:管道

原文地址:http://10810429.blog.51cto.com/10800429/1827135

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!