命名管道/匿名管道:
“有名字”则可以通过“名字”打开相同的管道进行通信,没有名字(在内核中没有明确标识)只能通过:
#子进程复制父进程的方式实现通信,复制了文件描述符
#匿名管道只能用于具有亲缘关系的进程间通信。只要在创建进程之前创建管道,后边的进程都可以实现通信。
#命名管道可用于同一主机任意进程间通信
管道原理:
操作系统在内核提供的一块缓冲区(只要进程能够访问到这块缓冲区就可以实现通信)
创建管道时,操作系统会提供两个操作句柄(文件描述符),其中一个用于从管道读取数据,一个向管道写入数据
子进程通过复制父进程的方式,获取到管道的操作句柄,进而实现访问同一个管道通信
匿名管道:
内核中的缓冲区没有明确标识符,其他进程无法直接访问管道,匿名管道只能用于具有亲缘关系的进程间通信,因为匿名管道在创建的时候操作系统返回了两个句柄,因此只能通过创建子进程,子进程复制父进程的方式获取到这个管道的操作句柄,进而访问同一块缓冲区。
int pipe(int pipefd[2]);
创建一个匿名管道,向用户通过参数pipefd返回管道的操作句柄。
ipc :进程间通信
pipefd[0]:管道的读取端
pipefd[1]:管道的写入端
有两个元素的数组就是两个操作句柄
返回值:0成功 -1失败