2

mkfifo fifo
echo 1 >fifo 在最后一个命令上阻塞。

我在gnu libc中找到了对此的解释

但是,它必须同时在两端打开,然后才能继续对其进行任何输入或输出操作。打开一个 FIFO 进行读取通常会阻塞,直到某个其他进程打开同一个 FIFO 进行写入,反之亦然。

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

不会阻塞并且运行良好。再次,AFAIK shell 使用 dup2 进行重定向,但这有什么不同呢?

实际上,当我提出问题时,我找到了答案。我会在下面贴出来。

4

1 回答 1

1

答案很简短。

从我的 linux 发行版man 7 fifo

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

所以这是由于<>重定向。

于 2012-07-19T05:54:43.290 回答