进程中通信的‘无名管道’和‘有名管道’的用法和二者的区别

来源:互联网 发布:淘宝闲鱼手机版网页 编辑:程序博客网 时间:2024/04/28 14:53

今天我简单介绍一下“无名管道(pipe)”和“有名管道(mkfifo)”。

什么叫管道?简单的说就是一种通信方式,就是一个程序的输出直接连接到另一个程序的输入。

第一幅图就是管道的一个图解。其中fd[0]固定用于读管道,fd[1]固定用于写管道。比如说我们开了父子进程,那么父进程如果开了fd[0],那么子进程只能开fd[1],这样的话就可以在子进程往管道里写,父进程从管道里读取。若管道对象在使用时内核产生,不使用时就不产生时,那么这一定是无名管道;若在使用时内核中产生了一个管道文件,且不使用时还于内核中存在,那么往往是有名管道。

【无名管道】特点:

1、只能用于具有亲缘关系的进程之间通信(父子进程或者兄弟进程)。

2、是一个单工(半双工)的通信模式,具有固定的读写端。

3、每次使用都需要创建管道对象。

【有名管道】特点:

1、可以在互不相关的进程之间实现通信。

2、改管道是通过路径名来指出,在文件系统中是可以看到的,在建立管道后可以当做普通文件来使用读写操作。

3、严格遵循先进先出的规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。且不支持如lseek()等文件定位操作。

0 0