unix 命名管道

355 阅读1分钟

管道(pipe)是linux最常用的IPC通信手段。

比如下面命令中的|就是一个匿名管道,管道作为通道(channel)连接两个进程,一个是ls,一个是grep hello.txt, 不过这是匿名管道

ls | grep hello.txt

命名管道

可以使用mkfifo命令创建一个命令管道

# 会在当前目录创建一个名字为pipe2的管道文件
mkfifo pipe2
  • 进程1:
# 将一条消息写入管道文件,当前进程阻塞
echo hello > pipe2
  • 进程2
# 从管道文件中读取ls-进程1的输出,进程1退出阻塞。
cat < pipe2

golang创建fifo

runc exec 中可能用管道实现,获取容器bash执行输出

package main

import (
	"golang.org/x/sys/unix"
)

func main() {
	unix.Mkfifo("testfifo",0o777)
}