管道(pipe)是进程间通信的一种实现方式。在 Linux 系统中,管道本质上是一种特殊的文件,它的主要用途是实现进程间的通信。文中演示所用环境为 Ubuntu 18.04 desktop。
管道的一个显著特点是:创建一个管道后,会获得两个文件描述符,分别用于对管道进行读取和写入操作。通常将这两个文件描述符称为管道的读取端和写入端,从写入端写入管道的任何数据都可以从读取端读取。
对一个进程来说,管道的写入和读取操作与写入和读取一个普通文件没有什么区别,只是在内核中通过这种机制来实现进程间的通信而已
cat file.txt | grep -v "dfd"
相当于在 cat 进程 和 grep 进程之间建立了一个管道,cat 负责向管道写入 grep 负责从管道读取,普通文件打开只返回一个文件描述符,而打开一个管道则返回两个描述符,读和写,相当于普通文件是双工的,管道是单共的。