Linux中进程通讯--无名管道
上一篇更博是有名管道,今天我们来看看无名管道。
无名管道:相对于有名管道而言的,无名管道在使用时产生,不使用后释放。并不会在系统上留下任何蛛丝马迹。无名管道因其使用前没有任何的标识,所以它只能应用于父子进程之间。因为父子进程会复制父进程的文件表数组。(浅拷贝)
无名管道的操作:
1、创建 int pipe(int fd[2]);//fd[o]表示读数据 fd[1表示写数据]
2、打开 和创建一样,创建的同时就打开
3、读数据 read(fd[0],buff,size);
4、写数据 write(fd[1],buff,len);
5、关闭 close(fd[1]);close(fd[2]);
注意::管道都是半双工通讯,而无名管道创建后,父进程在fork产生子进程后,两个进程分别有一对读写,所以,要在父子进程分别关闭读或写(如果需要读就关闭写,需要写就关闭读)
下面我们来看一个例子:
父进程循环读入用户输入以end结束并写入管道,子进程从管道中获取并且统计字符个数。
此程序中,父进程负责写入,子进程负责读取,所以父进程关闭读(close fd[o]),子进程关闭写(close fd[1])
执行结果: