1

Следующие примеры программ оболочки делают вопрос более понятным.

Учитывая простое символьное устройство (в моем случае устройство ftdi ttyUSB), я отправляю ему запрос с помощью echo open();write();close(); устройство, затем прочитайте ответ с помощью cat чтобы open();read();close(); устройство с двумя различными процессами (/bin/echo и /bin/cat).

  1. Следующие работы:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; /bin/cat -e < /dev/ttyUSB0 
M-^?^B^@^C
  1. Следующее не работает:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; sleep 2s ; /bin/cat -e < /dev/ttyUSB0 
cat does not read anything
  1. Еще один рабочий пример:
$ /bin/cat -e < /dev/ttyUSB0 & sleep 2s ; /bin/echo -ne $request > /dev/ttyUSB0
M-^?^B^@^C

Что происходит в 2? Почему поведение отличается? Куда делись данные?

1 ответ1

1

Данные буквально никуда не делись. Никто его не слушал, поэтому его выбросили. Точная механика зависит от аппаратного обеспечения, но обычно первое открытие устройства очищает любые приемные буферы в аппаратном обеспечении, хотя нет никакой гарантии, что эти буферы даже включены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .