管道——(1)有名管道和无名管道

一、引子

之前,两个进程间要发送消息,是通过信号来完成的。创建通知事件,通过它引起响应,但是传送的信息只是一个信号值而已。

如果两个进程需要交换更有用、复杂的信息,就需要用到——管道。

管道——一个进程链接数据流到另一个进程,简单理解就是把一个进程的输出直接传递给另一个进程的输入。

为了更好地理解“管道”,我们举例:现有两个进程a、b,a进程中fgets“hello”,b进程printf“hello”(a

进程中的),该如何实现呢?

首先,我们可能想到的一种方法就是将a进程中的“hello”通过open、write调用写入到一个文件中,再让进程b读取这个文件中的内容,输出到屏幕上就可以了。

但是,文件是存储在磁盘上的,读写速度非常慢,读写效率也低,不宜采用。管道文件的数据存放在内存中,读写效率高,更适合用在“两个进程间的通信”上。


管道——(1)有名管道和无名管道_第1张图片

二、有名管道

1.概念:有名管道,通常被称为“FIFO文件”或“命名管道”,通常用于不相关的进程间的通信(任意两个进程间的通信),它是一种特殊的文件,在文件系统中以文件名的形式存在,可以在命令行上用“mkfifo fifo”创建一个名为“fifo”的有名管道。当然,有一些版本的Unix系统里面,还可以使用“mknod filename p”来创建一个有名管道文件,推荐使用前面的。


2.写端和读端:一个管道文件,需要两个进程,一个读称为“读端”,一个写称为“写端”。



你可能感兴趣的:(Linux,管道,进程,Linux)