为什么从 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
,您
- 已打开
a.fifo
阅读
- 读取一个字符
- 关闭
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
首先我做了一个fifo
mkfifo a.fifo
然后我附和一下
echo 1 > a.fifo
再开一个terminal,同样添加sth
echo 2 > a.fifo
当然,这两个都被阻塞了,那我从fifo文件中读取
read -n1 < a.fifo
全部释放了,我只有一个,另一个字符不见了...
我的问题是为什么会发生这种情况,如何在不丢失数据的情况下从 fifo 文件中逐一获取内容?
感谢
通过read -n1 < a.fifo
,您
- 已打开
a.fifo
阅读 - 读取一个字符
- 关闭
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