Linux 的 mkfifo 命令

mkfifo 是 Linux 系统中用于创建命名管道(FIFO)的命令行工具。命名管道是一种特殊的文件类型,允许不相关的进程通过文件系统进行通信。

基本语法

bash 复制代码
mkfifo [选项] 文件名

常用选项

  • -m, --mode=MODE:设置管道文件的权限模式(类似 chmod)
  • -Z:设置 SELinux 安全上下文
  • --context=CTX:类似 -Z,但指定完整的 SELinux 安全上下文

工作原理

命名管道(FIFO)与普通管道的主要区别在于:

  1. 命名管道在文件系统中有一个实体文件
  2. 不要求通信进程之间有父子关系
  3. 可以被多个进程同时读写

使用示例

基本使用

bash 复制代码
mkfifo mypipe

这将创建一个名为"mypipe"的FIFO文件,默认权限为666(受umask影响)

指定权限

bash 复制代码
mkfifo -m 644 named_pipe

创建一个权限为644的命名管道

进程间通信示例

在终端1中:

bash 复制代码
mkfifo pipe_test
cat pipe_test  # 等待读取数据

在终端2中:

bash 复制代码
echo "Hello FIFO" > pipe_test

终端1将显示"Hello FIFO"

应用场景

  1. 脚本间通信:不同shell脚本之间的数据传递
  2. 日志处理:实时将日志通过管道传递给处理程序
  3. 进程同步:协调多个独立进程的执行顺序
  4. 网络代理:作为本地进程和网络服务之间的中介

注意事项

  1. 命名管道会一直存在于文件系统中,直到被显式删除
  2. 读写操作默认是阻塞的,可以使用O_NONBLOCK标志改变这一行为
  3. 多个进程可以同时写入同一个FIFO,但可能导致数据交错
  4. 删除FIFO文件使用普通的rm命令

相关命令

  • mknod:创建特殊文件(包括FIFO)
  • pipe:创建匿名管道
  • socat:更强大的网络和进程间通信工具
相关推荐
M78佐菲3 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
Brilliantwxx4 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
不怕犯错,就怕不做4 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
richdata4 小时前
商品数字化不是先做大数据,而是先把数据变成可用决策
大数据·运维·数据治理·商品数字化·智能补货·ai商品决策
weixin_416667965 小时前
【无标题】
运维·服务器·网络
一池秋_6 小时前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
惜离殇6 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
上海云盾-小余7 小时前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
IT大白鼠7 小时前
Docker 私有仓库管理:Harbor 企业级仓库搭建与镜像全生命周期管理
运维·docker·容器
戴西软件8 小时前
戴西iDWS.3DViz Suite数据轻量化可视化软件,从传统桌面软件向云端协同的重大突破
大数据·运维·网络·人工智能·机器学习·3d