FIFO
目录
FIFO介绍
FIFO常被称为命名管道,以区分管道(pipe)。管道(pipe)只能用于“有血缘关系”的进程间通信。但通过FIFO,不相关的进程也能交换数据。
FIFO是Linux基础文件类型中的一种(文件类型为p,可通过ls -l查看文件类型)。但FIFO文件在磁盘上没有数据块,文件大小为0,仅仅用来标识内核中一条通道。进程可以打开这个文件进行read/write,实际上是在读写内核缓冲区,这样就实现了进程间通信。
创建管道
-
方式1-使用命令 mkfifo
命令格式: mkfifo 管道名
例如:mkfifo myfifo
-
方式2-使用函数
int mkfifo(const char *pathname, mode_t mode);
参数说明和返回值可以查看man 3 mkfifo
当创建了一个FIFO,就可以使用open函数打开它,常见的文件I/O函数都可用于FIFO。如:close、read、write、unlink等。
FIFO严格遵循先进先出(first in first out),对FIFO的读总是从开始处返回数据,对它们的写则把数据添加到末尾。*它们不支持诸如*lseek*()等文件定位操作。*
使用FIFO完成两个进程通信
-
使用FIFO完成两个进程通信的示意图
思路:
进程A:
-
创建一个fifo文件:myfifo
-
调用open函数打开myfifo文件
-
调用write函数写入一个字符串如:“hello world”(其实是将数据写入到了内核缓冲区)
-
调用close函数关闭myfifo文件
进程B:
-
调用open函数打开myfifo文件
-
调用read函数读取文件内容(其实就是从内核中读取数据)
-
打印显示读取的内容
-
调用close函数关闭myfifo文件