您的位置:首页 > 运维架构 > Linux

Linux中进程通讯--无名管道

2017-10-20 10:39 537 查看
上一篇更博是有名管道,今天我们来看看无名管道。

无名管道:相对于有名管道而言的,无名管道在使用时产生,不使用后释放。并不会在系统上留下任何蛛丝马迹。无名管道因其使用前没有任何的标识,所以它只能应用于父子进程之间。因为父子进程会复制父进程的文件表数组。(浅拷贝)

无名管道的操作:

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])

执行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: