管道通讯的学习笔记

来源:互联网 发布:c语言中temp什么意思 编辑:程序博客网 时间:2024/06/16 20:32

管道通讯是一种非常方便的信息交流方式,可以非常方便的实现数据交换。一般用在不同进程之间进行数据交换。

管道通讯的核心机制是文件读写,几大流行操作系统都将管道抽象成文件,定义了read和write接口,用于数据读写。

管道分为匿名管道与命名管道两种,在linux中这两种管道的实现都基于文件系统,在windows中匿名管道的实现基于文件,而命名管道的实现基于socket通讯,是一种网络通信方式,因此可以实现跨网络通讯,听起来很强大,但是确实很鸡肋的特性,因此不谈。

在操作系统看来,管道就是一个普通的文件,进程可以对这个文件进行读写操作,而且是自带锁机制的,当一个进程在读管道内容的时候,其它进程会停止写入,直到其中内容全部读出,读取内容的进程会挂起,之后其它进程抢夺该文件的控制权,对该文件进行读写操作。

匿名管道被开发出来的主要用途就是用于重定向IO流。他主要用于shell操作时候,连接两个进程的标准输入输出,有过linux操作经验的用户应该很容易理解。在linux中大量的使用了管道技术来连接不同进程,实现通讯,他将前一个进程的标准输出信息写入后一个进程的标准输入。

匿名管道常常用于shell使用中,还可以利用系统函数创建管道,系统函数创建的管道作为一个普通文件,一般会返回一个文件句柄用来读写。对于匿名管道来说,需要将生成的子进程的标准输入和标准输出利用管道文件句柄进行替换,这样就可以实现表进程与子进程的交互。

作为一个程序来说,一般拥有三个信息点(参数接受,标准输入,标准输出),我们最容易将这三者混为一谈,原因就是在系统的shell程序中,这三者都是以字符串形式在屏幕上打印的。但是需要强调一点,这三者是完全不同的东西。

 参数:用于程序调用,在程序启动的最初传进程序的main函数,用于实现选项功能,但是只能传递一个字符串数组进来,此缓冲区一次调用中恒定不变,而且不可重新赋值;

 标准输入:用于程序输入,可以不断的写入数据,需要利用系统函数才能读写其中内容,最容易与系统调用参数混淆,其实,一般是在shell中启动程序之后,程序没有退出而且需要由人输入信息的时候,这个时候才是进入了标准输入。

 标准输出:用于程序输出,当程序输出任何东西,都会被打印到shell屏幕上。是调用后的结果。

匿名管道的作用就是重定向标准输入输出,因此对于一个子进程而言顶多架设两个匿名管道,一个用于输入,一个用于输出。如果需要更多通道,只能使用其它技术。

0 0
原创粉丝点击