为什么从 fifo 文件读取 -n 会丢失 shell 中的数据

why read -n from fifo file will lost data in shell

首先我做了一个fifo

mkfifo a.fifo

然后我附和一下

echo 1 > a.fifo

再开一个terminal,同样添加sth

echo 2 > a.fifo

当然,这两个都被阻塞了,那我从fifo文件中读取

read -n1 < a.fifo

全部释放了,我只有一个,另一个字符不见了...

我的问题是为什么会发生这种情况,如何在不丢失数据的情况下从 fifo 文件中逐一获取内容?

感谢

通过read -n1 < a.fifo,您

  1. 已打开 a.fifo 阅读
  2. 读取一个字符
  3. 关闭a.fifo

在任一端关闭一个 fifo,在两端关闭它。

在您不再需要它之前一直打开它。

exec 3< a.fifo    # open for reading, assign fd 3
read -r line1 <&3 # read one line from fd 3
read -r line2 <&3 # read one line from fd 3
exec 3<&-         # close fd 3

在另一端:

exec 3> a.fifo       # open for writing, assign fd 3
printf 'hello\n' >&3 # write a line to fd 3
printf 'wolrd\n' >&3 # write a line to fd 3
exec 3>&-            # close fd 3

有关重定向的更多信息,请参阅 http://wiki.bash-hackers.org/howto/redirection_tutorial