2

管道通信(进程管道通信)

一、管道通信简介

1、管道通信是指一种进程间通信方式,它允许两个非相关的进程间进行通信,而且拥有双向的特征,所以也称之为双向管道。它源自于Unix系统,支持进程之间的通信,当一个进程向管道写入数据时,另一个进程就可以从管道中读取数据。

2、在Windows操作系统中,管道也可用于程序与程序之间或程序与终端之间进行通信。 典型的管道可以支持不同程序不同典型之间的通信,比如管道在一些常用的Unix命令中被经常使用来链接不同的程序,以达到一次执行多个命令的效果。

3、管道一般分为有名管道和无名管道。有名管道是指新创建的管道用文件名命名,此类管道拥有文件属性,并可以变成普通文件。有名管道又可分为匿名管道和命名管道两种。其中匿名管道只存在于创建它的进程的生存期内,命名管道即被称作FIFO文件。

4、无名管道用于进程间的通信,只能在父子进程或者兄弟进程间使用,也可以在同一实例的程序间使用,像在宿主机上支持IPC(Inter Process Communication),这些无名管道都是从父子进程建立而来。无名管道在Unix系统中支持多种使用方式,如INTENTIONAL links,UNIX Local sockets 和Stream sockets等,可以实现多种不同的IPC类型。

二、管道通信的优势

1、管道通信有着良好的安全性:即使是进程之间的通信,管道只能保证写入的进程和读取的进程以及其他任何客户端都只能访问自己的管道,而不能访问其他客户端的管道。所以,进程可以安全地进行数据操作。

2、管道通信还有很好的实时性:无论写入进程和读取进程实现什么速率,管道都可以满足有效地通信需求。

3、管道通信还支持并发性:有效的利用管道技术,多个客户端可以与一个服务器同时进行通信,而不用担心性能的影响。

4、管道通信非常简单,配置容易:非常容易处理,没有IP和配置或认证等繁琐步骤。

三、管道通信的应用

1、管道通信通常用于进程间通信,是Unix系统中比较常见的IPC,通过管道机制,可以让程序间完成信息的读写操作,使用管道技术可以实现多种不同的IPC类型。

2、管道通信广泛应用于系统中的各种功能,比如可以将管道用于输入输出重定向,也可以使用管道将某一个程序的输出作为另一个程序的输入。

3、管道通信还可以应用于管理系统的任务调度,通过将一个程序的运行输出作为另一个程序的输入然后再输出到文件,从而简化程序的流程,提高程序的效率。

4、此外,管道通信还可以应用于进程间通讯,支持两个不相关的进程之间进行通信,有效支持Linux服务器的客户端工作。

一、管道通信简介

1.1 定义

管道通信是一种形式的数据交换方式,也是一种进程间通信(Inter-Process Communication,IPC)的方式之一。它是指一种特殊的进程间的通信机制,能够实现让一个进程的输出为另一个进程的输入,以此实现数据的传输。

1.2 历史渊源

管道通信最初于1969年被 Dennis Ritchie 带到 Unix 上,其实现思想也是从 Unix 启动过程中 shell 与其它程序之间形成的管道而来。因此,管道通信也被称为 Unix 管道。

1.3 管道通信的特点

(1)良好的可扩展性:管道的功能可以增加,随时可以按需求添加新的进程;

(2)延迟较小:管道通信的数据传输速度比普通的网络传输快;

(3)方便的管理:一次性设定好通信要求,之后可以更方便更快捷的执行;

(4)易于实现:只需要调用相应的系统函数,并编写一定的程序就可以实现。

二、管道通信的实现方式

2.1 单向管道

单向管道是管道通信最简单的形式,它只允许一个进程向另一个进程发送数据,发送的数据会丢失,另一个进程无法将数据传递回来,也就是说只能实现单向数据传输。如果要实现双向数据传输,则需要使用双向管道。

2.2 双向管道

双向管道(又称环形管道或者同时打开的管道)是可以实现双向数据传输的管道,它允许多个进程之间相互传输数据,但两个进程之间传输的数据是相互独立的,每个进程中读取到的数据来自其它进程中的输入,而不是其它进程中的输出。

2.3 主动/被动管道

这种类型的管道是有父子进程共同共享的,父进程创建了一个管道,然后 fork 了子进程,随后将该管道的文件描述符使用 dup 函数复制给子进程,使得管道被父子进程共同共享,从而实现通信,其中,子进程就是被动进程,父进程就是主动进程。

三、现有管道通信模型

3.1 流式 Pipe(Stream Pipe)

流式管道是最常用的管道通信模型,该模型要求两个进程必须是建立在同一个文件系统下,它负责处理单向流式数据传输,通常会有一个进程阻塞等待另一个进程发出请求,然后接收发送的数据,对并发数据的处理则在上层协议中实现。

3.2 管道匿名(Anon Pipe)

匿名管道是指在管道建立之后,会立即删除管道文件,也就是说只能在特定的时间内进行数据交换,通常只用于父子进程间的通信,由于管道文件已经不存在,也就不能跨越文件系统来进行通信了。

3.3 FIFO 管道

本文来自网络,不代表本站立场。转载请注明出处: https://tj.jiuquan.cc/a-2226393/
1
上一篇电脑光标下载(电脑光标图片下载)
下一篇 win8快捷键(win8快捷键录屏)

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: alzn66@foxmail.com

关注微信

微信扫一扫关注我们

返回顶部