有名管道(FIFO):
有名管道是持久稳定的。
有名管道存在于文件系统中。
有名管道能让无关联的进程之间交换数据。
有名管道和文件操作类似,都是有路径的。
shell操作有名管道:
创建有名管道:mkfifo[option] name,创建一个名为name的有名管道。
读取管道数据:cat< name,从名为name的有名管道中读取数据。
写入管道数据:[command]> name,将命令的结果写入到名为name的有名管道中。
关闭有名管道:unlinkname,关闭名为name的有名管道,或使用rm –rf –name。
函数操作有名管道:
创建有名管道fifo:
man 3 mkfifo
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
函数返回值:返回0,代表创建管道成功;返回-1,代表创建管道失败。
函数的参数:第一个参数是管道所在的路径和名字;第二个参数是管道的权限。
删除有名管道fifo:
man 3 unlink
#include <unistd.h>
int unlink(const char *path);
函数返回值:返回值为0,代表成功删除;返回值为-1,代表删除失败。
函数的参数:参数指的是管道所在的路径和名字。
打开和关闭fifo:
int open(const char *pathname, int flags);
int close(int fd);
Linux的一切都是文件这一抽象概念的优势,打开和关闭FIFO和打开关闭一个普通文件操作是一样的。
FIFO的两端使用前都必须要打开。
open中如果参数flags为O_RDONLY将阻塞open调用,一直到另一个进程为写入数据打开FIFO为止。相同的,O_WRONLY也导致阻塞一直到为读出数据打开FIFO为止。