
Um shell no Linux (por exemplo: bash
) tem todos os seus descritores de arquivo ande stdin
apontando para o mesmo arquivo de dispositivo, por exemplo, a seguir estão os descritores de arquivo ande para :stdout
stderr
stdin
stdout
stderr
bash
Agora /dev/tty1
não é um arquivo "real" que você pode ler e gravar, é um arquivo de dispositivo que aponta para um arquivo ou para um buffer na memória ou para qualquer outra coisa.
Agora minha pergunta é: /dev/tty1
aponta para apenas um arquivo ou aponta para dois arquivos?
O que quero dizer é que, quando bash
lê de /dev/tty1
( stdin
) e quando bash
escreve para /dev/tty1
( stdout
ou stderr
), ele está lendo e escrevendo para omesmo arquivo, ou /dev/tty1
aponta para dois arquivos, um é usado ao ler /dev/tty1
e o outro é usado ao gravar em /dev/tty1
?
Responder1
Um nó de dispositivo aponta para um únicodispositivo, que no Linux é gerenciado pelo kernel. Quando bash
lê from /dev/tty1
, ele lê no driver de dispositivo que gerencia o primeiro terminal; quando grava nele, ele grava no mesmo driver de dispositivo.
Responder2
Um arquivo de dispositivo não “aponta para vários arquivos”. Um arquivo de dispositivo nem “aponta” para um único arquivo. Um arquivo de dispositivo aponta para um driver. O driver contém código que lida com operações de leitura e gravação.
Não precisa haver uma relação entre os dados lidos no dispositivo e os dados gravados. Alguns dispositivos possuem um, outros não. Por exemplo, com um disco, os dados lidos em uma determinada posição são os dados que foram gravados anteriormente nessa posição. Por outro lado, com uma porta serial, os dados gravados no dispositivo são enviados na linha serial e os dados lidos do dispositivo são recebidos na linha serial; o que é enviado é independente do que é recebido.
Um terminal é muito parecido com um dispositivo serial. Na verdade, historicamente, os terminais físicos eram geralmente conectados através de linhas seriais. Quando um aplicativo lê um arquivo de terminal, ele recebe dados que foram enviados pelo driver de terminal ou pelo emulador de terminal — o driver/emulador de terminal grava a entrada em seu lado do terminal, o aplicativo lê a entrada em seu lado do terminal. Quando um aplicativo grava em um arquivo de terminal, ele envia dados que são lidos pelo driver de terminal ou pelo emulador de terminal — o aplicativo grava a saída em seu lado do terminal, o driver/emulador de terminal lê a saída em seu lado do terminal .