Linux进程间通信(一)匿名管道方式

pipe管道

什么是进程通信

进程通信就是两个进程之间进行数据交换,在Linux中有好几种可以进行进程通信的方式,在这篇文章中我们主要介绍最基本的进程通信方式——pipe管道。
进程通信的途径

进程之间交换信息的唯一途径就是传送打开的文件。

管道(pipe)

管道是一种最古老也是最基本的系统IPC形式,所有的Linux系统都提供此种通信机制。但是管道有以下两个局限性:

它是半双工的,即数据一个管道上的数据只能在一个方向上流动,如果要实现双向通信,就必须在两个进程之间建立两个管道;
管道只能在具有公共祖先的两个进程之间使用;
- 

pipe的实现机制

管道是由内核管理的一个缓冲区,它的一端连接一个进程的输出,另一端连接一个进程的输入。管道的缓冲区不需要很大,它被设计为环形的数据结构,当两个进程都终止后,管道的生命周期也会被结束。
管道的创建

管道是通过调用pipe函数创建的。

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

它由输出型参数fd返回两个文件描述符,fd[0]为读而打开,fd[1]为写而打开,fd[1]的输出是fd[0]的输入,当管道创建成功后pipe函数返回0,如果创建失败则返回-1,fd[0]和fd[1]之间的关系如下图:(pipe1)
如何通过pipe进行通信

上面我们在单个进程中建立了管道,但是实际上,单个进程中的管道是没有什么用的,通常,进程会先调用pipe函数产生管道,接着调用fork()函数,fork函数会将父进程的相关数据结构继承到子进程中,这样就使子进程中的文件描述符表中的fd[0]和fd[1]指向父进程所指向的管道文件,这样就能实现两个进程之间的通信了。

程序如下:

这里写图片描述

结果:

这里写图片描述
其他方式见下篇博客》》

猜你喜欢

转载自blog.csdn.net/jiaochiwuzui/article/details/79611629