为什么在bash块中输出到fifo而在重定向时不输出

时间:2012-07-19 05:54:43

标签: bash shell

  

mkfifo fifo
  echo 1> fifo   最后一个命令阻止。

我在gnu libc

中找到了对此的解释
  

但是,必须在两端同时打开它才能继续对其进行任何输入或输出操作。打开FIFO以便正常读取块,直到某个其他进程打开相同的FIFO进行写入,反之亦然。

但是

>mkfifo fifo  
>exec 5<>fifo  
>echo 1 >&5

不会阻止并且效果很好。 AFAIK shell再次使用dup2进行重定向 这有什么不同?

实际上,当我提出问题时,我找到了答案。我将在下面发布。

1 个答案:

答案 0 :(得分:1)

答案很简短。

来自我的Linux发行版man 7 fifo

  

在Linux下,打开FIFO进行读写将在阻塞和非阻塞模式下成功。 POSIX将此行为保留为未定义。

所以这是由于重定向<>