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])
执行结果:
无名管道:相对于有名管道而言的,无名管道在使用时产生,不使用后释放。并不会在系统上留下任何蛛丝马迹。无名管道因其使用前没有任何的标识,所以它只能应用于父子进程之间。因为父子进程会复制父进程的文件表数组。(浅拷贝)
无名管道的操作:
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])
执行结果:
相关文章推荐
- Linux 进程间通讯之创建无名管道和读写无名管道
- Linux进程间通讯一--无名管道PIPE
- Linux 进程间通讯之创建无名管道和读写无名管道
- linux进程间通讯-匿名管道
- linux进程间通讯--管道
- linux进程间的通信-无名管道
- Linux 进程间通讯之有名管道方式
- linux_c开发(5-2)进程间通讯_管道通讯
- Linux-进程间通讯-管道
- 【Linux】利用管道在进程通讯拷贝文件
- 快速理解Linux下僵死进程、孤儿进程和守护进程及无名管道
- Linux c==进程通信--无名管道(2)
- linux进程无名管道通信
- Linux下用fork()派生的子进程通过pipe管道通讯的实例详解("生产者-消费者"问题)
- 进程间通讯——无名管道
- Linux进程通讯:管道通讯、信号通讯、共享内存
- Linux进程间通讯--管道(有名管道
- 进程间通讯摘录(1)-----无名管道
- Linux下进程的创建及其使用管道进行进程之间的通讯[00原创]
- Linux笔记_进程通讯——管道