使用父进程创建四个子进程,在进程间用pipe函数进行通信。
步骤一:父进程创建管道
Linux给我们提供了创建管道的函数pipe,pipe函数正是基于“子进程会继承父进程的资源”这种特性来实现的,因为子进程会继承父进程的资源,那么子进程和父进程就能看到同一份文件内核缓冲区。
pipe函数的参数是一个输出型参数,返回两个文件描述符。管道被创建时,会需要使用两个文件描述符,一个文件描述符用于向管道写数据,一个文件描述符用于从管道读数据。
- 要从管道读数据时,使用的是文件描述符 pipefd[0];
- 向管道写入数据时,使用的是文件描述符 pipefd[1];
pipe函数的返回值代表管道是否创建成功。如果创建成功,返回0;否则返回-1。
int pipefd[2]; //存储创建管道时,占用的两个文件描述符
pipe(pipefd);
步骤二:父进程创建子进程 fork(); //创建子进程
创建一个子进程,让子进程和父进程通信,子进程被创建时,会继承父进程的 fd_array[ ],所以子进程也会指向这个管道
步骤三:关闭父进程的pipefd[1] 和子进程的pipefd[0]
if(fork()==0)
{
//子进程
close(pipefd[0]);
}
//父进程
close(pipefd[1]);