无名管道和有名管道的区别:
无名管道只能用于父进程和子进程之间通信,而有名管道可以用于任意两个进程间通信
管道工作的原理:
切记:无名管道一旦创建完成后,操作无名管道等同于操作文件,无名管道的读端/写端 都被视作一个文件。
读端为pipefd[0] ,写端为pipefd[1]
代码实例:
#include<stdio.h>
#include<unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
int main()
{pid_t pid = 0;int pipefd[2];char c_buf[10];/*2 创建管道 */pipe(pipefd);//注意pipe()函数的用法,函数调用后pipefd会被赋值。/*1 创建子进程*/pid = fork();if(pid >0){/*父进程写入数据*/write(pipefd[1],"hello",6);wait(NULL);// 等待子进程结束close(pipefd[1]);//关闭管道fdexit(0);//退出主进程}if(0 == pid){/*子进程读数据*/read(pipefd[0],c_buf,6);printf("child process read : %s\n", c_buf);close(pipefd[0]);exit(0);}return 0;
}
~
~
~
~