无法写入命名管道

时间:2013-03-13 03:31:07

标签: linux bash named-pipes

我正在尝试写入使用 mkfifo 制作的命名管道。但是当我运行命令(ex)ls > myNamedPipe时,我再也无法在bash中输入命令。我仍然可以写字符,这就是它。

1 个答案:

答案 0 :(得分:20)

命名管道一直打开,直到您从其他地方读取它。这是为了允许不同进程之间的通信。

尝试:

mkfifo fifo
echo "foo" > fifo

然后打开另一个终端并输入:

cat fifo

如果你回到第一个终端,你会注意到你现在可以输入其他命令。

另见反向发生的事情:

# terminal 1
cat fifo

# terminal 2
echo "foo" > fifo

# and now you can see "foo" on terminal 1

如果您希望终端在尝试向fifo写入内容时不“挂起”,请将fifo附加到文件描述符:

mkfifo fifo
exec 3<> fifo
echo "foo" > fifo
echo "bar" > fifo