打开带有 exec 的管道挂起

Opening pipe with exec hangs

我只想打开一个文件描述符来读取

mkfifo my_fifo
exec 3<$my_fifo

这个挂了

另一方面,当我这样做时

exec 3<>$my_fifo

然后就可以了。为什么?

打开 fifo(命名管道)进行读取会挂起,直到某个进程打开 fifo 进行写入,反之亦然。所以当打开returns的时候,就知道管道的"other end"是打开的

Linux 允许您在两个方向打开管道。如果这样做,管道的两端都是打开的,所以立即打开 returns。这是对 Posix 的扩展,并不适用于所有系统。

man 7 fifo 有更多信息。