命名管道基本概念:

    匿名管道没有名字,因此只有血缘关系的进程间才可以通信,命名管道的提出就是为了克服这个限制。命名管道是一个设备文件,因此,即使进程间无血缘关系,只要可以访问该路径,就能够通过FIFO通信。FIFO总是按照先进先出的原则工作,第一个被写入的数据将首先从管道中读出来。

命名管道的创建与读写:

    Linux下有两种方式创建命名管道:一是在shell下交互建立一个命名管道,而是在程序中使用系统函数建立命名管道。shell方式下可以使用mknod和mkfifo命令。

    命名管道和匿名管道的使用方法基本一样,只是命名管道在使用前必须先调用open()将其打开。因为命名管道是存在于硬盘上的文件,而匿名管道是在内存中的特殊文件。

    mknod是比较老的函数,而使用mkfifo更加简单和规范,所以尽量使用mkfifo创建管道。

    调用open()打开命名管道的进程可能会被阻塞,但如果以同时读写的方式打开则一定不会被塞,

但如果以只读或者只写的方式打开可能会被阻塞。

write端程序:

wKioL1eG7uDy5W6CAADMTw27n8A244.png-wh_50

wKiom1eG7uCib_xTAAC9cqJ7ip8857.png-wh_50

read端程序:

wKioL1eG8OiBVVGcAADJkx38uUY521.png-wh_50

wKioL1eG8RGSrzAeAACo0uM9MSQ153.png-wh_50

运行结果:

wKioL1eG8iuSWHTBAAHF19wxydk488.png-wh_50