【发布时间】:2013-02-28 20:54:34
【问题描述】:
我正在尝试写入使用 mkfifo 制作的命名管道。但是当我运行命令时,(例如)ls > myNamedPipe,我不能再在 bash 中输入命令。我仍然可以写字符,仅此而已。
【问题讨论】:
标签: linux bash named-pipes
我正在尝试写入使用 mkfifo 制作的命名管道。但是当我运行命令时,(例如)ls > myNamedPipe,我不能再在 bash 中输入命令。我仍然可以写字符,仅此而已。
【问题讨论】:
标签: linux bash named-pipes
命名管道保持打开状态,直到您从其他地方读取它。这是为了允许不同进程之间的通信。
试试:
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
【讨论】:
exec 3<> fifo 行是如何解决问题的……