在了解管道之前,至少我们要了解的进程的概念。
而管道就是用于进程间通信的一种方式。先说结论:
所谓管道,是指用于连接一个读进程和一个写进程以实现他们之间的通信的一个共享文件。
我们需要了解一下以下几个概念
①共享存储
是在通信的进程之间存在一块可直接访问的共享空间,如下图,也就是说,通信双方的两个进程都可以访问这块空间
②消息传递
我们这里说的是基于间接通信方式的消息传递(邮件),就是也就是发送进程把消息发送到某个中间实体,接收进程再从中间实体取得信息。
管道通信
了解了上面两个基本概念,我们再说管道通信。其实所谓的管道通信就是将上述两种原理结合,以Linux管道为例
我们知道,Linux下一切皆文件,所以本质上看管道也是一种文件,但又有所不同,就像是一块固定大小的缓冲区。
管道通信的过程就是:写进程将消息写入管道,读进程在将消息读出来,完成通信。
前面说了,既然管道是固定大小,那就有写满或取空的时候,当管道变满时,写进程将会被阻塞不能再写,当管道取空时,读进程不能再读;
另外注意,①从管道读数据是一次性的操作,数据一旦被读取,就被管道所抛弃,释放空间。
②管道只能采用半双工通信,即某一时刻只能单向传输,要实现双方进程互动,则需要我们说的定义两个管道。