目录:
1.命名管道
2.创建命名管道
---------------------------------------------------------------------------------------------------------------------------------
1.命名管道
1.管道的一个应用限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信
2.如果我们想在不相关的进程之间交换数据,可以使用FIFO这个文件来做这项工作,它经常被称为命名管道
3.命名管道是一种特殊文件类型
2.创建命名管道
mkfifo 是一个命令 ---- 创建一个命名管道
我们先以文件的方式实现一下命名管道
可是把数据写进文件里,降低效率
我们现在有两个需求??
1.你得存在一个文件,这个文件打开时它把数据不要刷新到磁盘上,而只是在内存当中作为数据的临时保存
2.这个文件在磁盘上也有对应的文件名 ,方便两个进程使用路径+文件名的方式看到同一份资源
符合上面这两个条件的就是我们的命名管道
----------------------------------------------------------------------------------------------------------------------------
但是如果你想让makefile一次就生成两个可执行程序
接下来我们该怎么做呢???
创建管道文件
自此,我们的管道文件就有了,进程怎么通信呢???
一旦我们具有了一个命名管道,此时我们只需要让通信双方按照文件操作即可!!!
我们现在开始证明他们两个能通信!!!
接下来,我们在运行我们的client程序,打开管道文件,进行写入
------------------------------------------------------------------------------------------------------------------
因为命名管道,也是基于字节流的,所以实际上,信息传递的时候,是需要双方定制“协议的”,不考虑这个
今天我们就单纯的进行字符串通信
这样子我们就实现了进程间通信的目的:除了实现数据传输之外,还实现了一个进程控制另一个进程
----------------------------------------------------------------------------------------------------------------------------
为什么我们之前的pipe叫做匿名管道,为什么现在的fifo叫做命名管道呢??
原因是因为fifo命名管道有名字,名字叫fifo,为什么一定要有名字呢??
为了保证不同进程看到同一个文件,必须要有名字
因为匿名管道没有名字,为什么匿名管道可以没有名字呢??
因为它是通过父子继承的方式看到同一份资源,不需要名字来标识同一份资源