почему чтение -n из файла fifo приведет к потере данных в оболочке

Сначала я делаю fifo

mkfifo a.fifo

Затем я повторяю что-то ему

echo 1 > a.fifo

Откройте другой терминал и также добавьте в него что-либо

echo 2 > a.fifo

Конечно два все заблокированы,тогда читаю из фифофайла

read -n1 < a.fifo

Все выпущены, а у меня есть только один, а другого чара нет...

Мой вопрос: почему это произошло и как я могу получить содержимое из файла fifo один за другим без потери данных?

Спасибо


person Henry    schedule 18.11.2015    source источник


Ответы (1)


Делая 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

Дополнительную информацию о перенаправление

person geirha    schedule 18.11.2015