赞
踩
管道(pipe)是Unix/Linux中最常见的进程间通信方式之一,它在两个进程之间实现一个数据流通的通道,数据以一种数据流的方式在进程间流动。在系统中,管道相当于文件系统上的一个文件,用于缓存所要传输的数据。在某些特性上又不同于文件,例如当数据读出后,管道中就没有数据了,但文件没有这个特性。管道有两个特点:
·部分系统下的管道是半双工的,数据在同一时间只能向一个方向流动。从实现的角度看,Linux内核采用环形缓冲区实现管道,如果允许同时读写,可能会导致数据冲突,Linux采用锁机制来防止同时读写。
·管道通常来说只能在具有亲属关系(父子进程、兄弟进程)的进程间使用。
管道(也称为匿名管道)是Linux中最古老的进程间通信机制,其应用非常广泛,也为用户在shell中提供了相应的管道操作符“|”。操作符“|”将其前后两个命令连接到一起,前一个命令的输出成为后一个命令的输入,且可以支持使用多个“|”连接多个命令。
·管道没有名字,所以也称为匿名管道
·管道是半双工的,数据只能向一个方向流动,需要双向通信时,需要建立起两个管道。
·只能用于父子进程或兄弟进程之间。
·管道对于其两端的进程而言只是一个文件,但它不是普通的文件,它不属于操作系统的某种文件系统,而是单独构成一种文件系统,并且只存在于内存中。
·管道传送的是无格式字节流,这就要求使用管道的通信双方必须事先约定好数据的格式。
- /**
- * struct pipe_buffer - a linux kernel pipe buffer
- * @page: the page containing the data for the pipe buffer
- * @offset: offset of data inside the @page
- * @len: le
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。