相关疑难解决方法(0)

命名管道、文件描述符和 EOF

两个窗口,同一用户,带有 bash 提示。在 window-1 中输入:

$ mkfifo f; exec <f
Run Code Online (Sandbox Code Playgroud)

所以 bash 现在试图从映射到命名管道的文件描述符 0 中读取f。在窗口 2 中键入:

$ echo ls > f
Run Code Online (Sandbox Code Playgroud)

现在 window-1 打印一个 ls 然后 shell 死了。为什么?

下一个实验:再次打开 window-1 exec <f。在窗口 2 中键入:

$ exec 3>f
$ echo ls >&3
Run Code Online (Sandbox Code Playgroud)

在上面的第一行之后,window-1 唤醒并打印提示。为什么?在上面的第二行之后,window-1 打印ls输出并且 shell 保持活动状态。为什么?事实上,现在在window-2中,echo ls > f并没有关闭window-1外壳。

答案一定与window-2 中引用命名管道的文件描述符 3的存在有关?!

file-descriptors fifo

10
推荐指数
2
解决办法
4617
查看次数

标签 统计

fifo ×1

file-descriptors ×1