无名管道:首先它是内核空间的实现机制;然后只能用于亲缘进程间通信;它在内核所占的大小是64KB;它采用半双工的通信方式;请勿使用lseek函数;读写特点:若读端存在写管道,那么有多少数据,就写多少数据,直到无名管道写满为止,此时会出现写阻塞,当无名管道出现新的4KB空间,写操作就会解除阻塞;若读端不存在写管道,会出现管道破裂的情况;若写端存在读管道,那么有多少数据,就读多少数据,没有数据的时候,会出现阻塞等待;若写端不存在读管道,有多少数据,就读多少,没有数据的时候,就会立即返回,即非阻塞的状态;创建无名管道(pipe函数): #include <unistd.h>int pipe(int pipefd[2]);/*功能:创建一个管道,是一个单向的数据通道,可用于进程间通信数组pipefd返回两个指向管道的文件描述符:pipefd[0]指向管道的读端 pipefd[1]指向管道的写端写入管道的数据被内核缓冲(64KB),直到从管道中读走参数:操作管道的文件描述符数组 pipefd[0]指向读端 pipefd[1] 指向管道的写端返回值:成功 0失败 -1 重置错误码*/ 有名管道:区别于无名管道,其可以用于任意进程间的通信;同无名管道一样,也是半双工的通信方式;有名管道的大小也是64KB;也是不能使用lseek函数;其本质上,是在内存上,在文件系统上只是一个标识;有名管道会创建一个管道文件,只需要打开这个文件,进行相应的读写操作即可;读写特点:若读端存在写管道,那么有多少数据,就写多少数据,直到有名管道写满为止,此时会出现写阻塞;若读端不存在写管道,会出现两种情况;第一种:读端没有打开,写端在open函数的位置阻塞;第二种:读端打开后关闭,会出现管道破裂的现象;若写端存在读管道,那么有多少数据,就读多少数据,没有数据的时候,会出现阻塞等待;若写端不存在读管道,也会出现两种情况;第一种:写端没有打开,读端在open函数的位置阻塞;第二种:写端打开后关闭,有多少数据,就读多少,没有数据的时候,就会立即返回,即非阻塞的状态;创建有名管道(mkfifo函数): #include <sys/types.h>#include <sys/stat.h>int mkfifo(const char *pathname, mode_t mode);/*功能:创建管道文件参数:pathname:管道路径和名字mode:管道文件的权限返回值:成功 0失败 -1 重置错误码*/