管道
管道
linux系统中,管道常用于进程间通信。常见的shell命令如ls | grep name中的|符号就是默认的管道,首先ls程序会将输出通过管道传给grep程序的输入。
管道的意义
两个fd作为A进程的数据对象,进程clone()或者fork()出B进程时,进程会复制初始进程的数据,从而B进程就可以访问两个fd。从而A和B之间就建立起了一种通信机制。
管道的原理
管道可以视为一种缓冲区,有着两个端点:写端和读端。数据只能从写端进入,从读端流出。创建管道时,系统会分配一个缓冲区,并为读写两端分配fd。
管道分类
匿名管道
匿名管道主要用于父子进程间进行通信。匿名管道通过pipe()创建,创建完成会生成一个pipefd数组,pipefd[0]代表读端,pipe[1]fd代表写端。
命名管道
命名管道主要用于非父子进程间进行通信。命名管道又称为FIFO(First in,First out),命名管道可以通过mkfifo命令或者mkfifo()系统调用进行创建。

浙公网安备 33010602011771号