As IOs do dispositivo são manipuladas mesmo quando um dispositivo não é aberto por nenhum processo?

1

Os seguintes exemplos de programa de shell tornam a questão mais clara.

Dado um dispositivo de caractere simples (um dispositivo ftdi ttyUSB no meu caso), envio uma solicitação com echo para open();write();close(); do dispositivo e, em seguida, leio a resposta com cat to open();read();close(); do dispositivo. dois processos distintos ( /bin/echo e /bin/cat ).

  1. Os seguintes trabalhos:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; /bin/cat -e < /dev/ttyUSB0 
M-^?^B^@^C
  1. O seguinte não funciona:
$ /bin/echo -ne $request > /dev/ttyUSB0 ; sleep 2s ; /bin/cat -e < /dev/ttyUSB0 
cat does not read anything
  1. Outro exemplo prático:
$ /bin/cat -e < /dev/ttyUSB0 & sleep 2s ; /bin/echo -ne $request > /dev/ttyUSB0
M-^?^B^@^C

O que acontece em 2 ? Por que o comportamento é diferente? Para onde foram os dados?

    
por Julio Guerra 02.06.2016 / 00:34

1 resposta

1

Os dados literalmente não deram em nada. Ninguém estava ouvindo, então foi descartado. A mecânica exata depende do hardware, mas normalmente a primeira abertura de um dispositivo limpa quaisquer buffers de recebimento no hardware, embora não haja garantia de que esses buffers estejam ativados.

    
por 02.06.2016 / 01:03

Tags