linux进程通信机制 管道
发布时间:2021-06-07
发布时间:2021-06-07
LINUX进程通信之管道
进程间通信(IPC)指的是至少两个进程间传送数据或者信号的一些技术和方法,进程是计算机系统分配资源的基本单位,每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程之间的通信。
操作系统中进程间传递的信息量有多有少,因此根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型,一种类型主要用于传递进程之间同步、互斥、终止、挂起等控制信息的传递,由于进程互斥与同步交换的信息量较少,并且每次通信传递的信息量固定且效率较低,因此称这两种通信方式为低级通信方式,主要方式有信号量。另一种类型在进程间以较高的效率传送大量数据,被称为高级通信方式,主要方式有管道,共享内存和消息队列。下面就管道通信进行论述。
管道是Linux 支持的最初Unix IPC 形式之一,当两个进程利用管道进行通信时,发送信息的进程称为写进程,接收信息的进程称为读进程。管道通信方式的中间介质就是文件,通常称这种文件为管道文件.它就像管道一样将一个写进程和一个读进程连接在一起,实现两个进程之间的通信。写进程通过写入端(发送端)往管道文件中写入信息,读进程通过读出端(接收端)从管道文件中读取信息。 管道具有如下特点:1)管道是半双工的,数据只能向一个方向流动,数据只能由写的一方向读得一方流动。
2)单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,成为管道文件,但它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
3)数据的读出和写入:管道建立时,通信两端的任务都是被固定了的,也就是说,一端只能用于读,而另一端只能用于写,写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 管道提供了从一种进程向另一种进程传输数据的有效方法, 但是, 管道还是存在一些不足:
(1) 因为读数据的同时也将数据从管道移去, 因此管道不能用来对多个接受者广播数据。
(2)如果一个管道有多个读进程, 那么写进程不能发送数据到指定的读进程。同样, 如果有多个写进程,那么没有方法来判别是它们中的哪一个发送的数据。
Linux 平台下进程间通信的方式很多, 其中以管道通信最能体现Linux 平台的特色。 而且管道常用于两个方面: (1) 在shell 中时常会用到管道, 在这种应用方式下, 管道的创建对于用户来说是透明的;
(2)用于具有亲缘关系的进程间通信, 用户自己创建管道, 并完成读写操作。
下一篇:消防安全管理制度