管道:也是文件,可以用于有血缘关系的进程间的通信。
实现机制:
两个或多个进程之间想要通信由于他们各拥有自己的地址空间所以必须有一块公共的空间,而这块空间就需要内核为他们提供,也就是缓冲区。
管道有两端一端负责输入,一端负责输出,所以两端就分别连接两个进程。进程1负责将数据输入到缓冲区,进程2将缓冲区的数据拿出来,这样就实现了两个进程的通信。
管道被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。
int pipe(int fd[2]);
功能: 创建一个简单的管道,若成功则为数组fd分配两个文件描述符,其中fd[0] 用于读取管道,fd[1]用于写入管道。
返回:成功返回0,失败返回-1;
#include<stdio.h>
#include<unistd.h>
#include<errno.h>