过一遍管道的基础知识:
1.本质:存在于高速缓存区,属于伪文件,不占用磁盘空间。缓冲区大小默认4K,可根据实际情况适当调整
2.读端和写端各自对应一个文件描述符,数据从写端流入,读端流出
3.操作管道的进程被销毁之后,管道占用的内存空间自动被释放
4.管道默认阻塞
5.内部实现方式:循环队列 (先进先出),属于半双工。数据只能读一次,不能重复读取
6.匿名管道创建:int pipe(int pipefd[2]);
(适用于有血缘关系的进程)
fd - - 传出参数
fd[0] - - 读端
fd[1] - - 写端
7.单个进程可以使用管道完成读写操作
8.父子进程间通信不需要sleep函数(使父进程写的慢,子进程读的快)
先实现一个简单的匿名管道:(编译环境:Ubuntu 18.04 Vim)
#include <stdio.h> #include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <string.h>#include <fcntl.h>int main(int argc,char *argv[]){int fd[2];int ret = pipe(fd);if(ret == -1){printf(