0

首先我做一个fifo

mkfifo a.fifo

然后我向它呼应一些东西

echo 1 > a.fifo

打开另一个终端,并添加 sth 到它

echo 2 > a.fifo

当然,这两个都被阻塞了,然后我从fifofile中读取

read -n1 < a.fifo

全部都被释放了,我只有一个,而另一个字符不见了……

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

谢谢

4

1 回答 1

3

通过这样做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

于 2015-11-18T07:30:43.770 回答