无名管道和有名管道的区别:
无名管道只能用于父进程和子进程之间通信,而有名管道可以用于任意两个进程间通信
管道工作的原理:
切记:无名管道一旦创建完成后,操作无名管道等同于操作文件,无名管道的读端/写端 都被视作一个文件。
读端为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]);//关闭管道fd
exit(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;
}
~
~
~
~