Um arquivo de dispositivo no Linux pode apontar para vários arquivos?

3

Um shell no Linux (por exemplo: bash ) tem seus descritores de arquivos stdin e stdout e stderr todos apontam para o mesmo arquivo de dispositivo, por exemplo, os seguintes são stdin e stdout e stderr descritores de arquivos para bash :

Agora,/dev/tty1nãoéumarquivo"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 outra coisa.

Agora, minha pergunta é: /dev/tty1 aponta para apenas um arquivo ou aponta para dois arquivos?

O que quero dizer é, quando bash/dev/tty1 ( stdin ), e quando bash grava em /dev/tty1 ( stdout ou stderr ), está lendo e escrevendo para o mesmo arquivo , ou /dev/tty1 aponta para dois arquivos, um é usado ao ler /dev/tty1 e o outro é usado ao gravar em /dev/tty1 ?

    
por Steve 19.05.2017 / 17:57

2 respostas

7

Um nó de dispositivo aponta para um único dispositivo , que no Linux é manipulado pelo kernel. Quando bash lê de /dev/tty1 , ele lê o driver de dispositivo que gerencia o primeiro terminal; quando grava, grava no mesmo driver de dispositivo.

    
por 19.05.2017 / 18:01
3

Um arquivo de dispositivo não "aponta para vários arquivos". Um arquivo de dispositivo nem sequer “aponta” para um único arquivo. Um arquivo de dispositivo aponta para um driver. O driver contém código que lida com as operações de leitura e gravação.

Não precisa haver um relacionamento entre os dados lidos do dispositivo e os dados gravados. Alguns dispositivos têm 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 foram recebidos na linha serial; o que é enviado é independente do que é recebido.

Um terminal é muito parecido com um dispositivo serial. De fato, historicamente, os terminais físicos geralmente eram conectados através de linhas seriais. Quando um aplicativo lê de um arquivo de terminal, ele recebe dados que foram enviados pelo driver do terminal ou pelo emulador de terminal - o driver / emulador do terminal grava a entrada em seu lado do terminal, o aplicativo lê a entrada do seu lado do terminal. Quando um aplicativo grava em um arquivo de terminal, ele envia dados que são lidos pelo driver do terminal ou pelo emulador de terminal - o aplicativo grava a saída em seu lado do terminal, o driver / emulador do terminal lê a saída para o lado do terminal .

    
por 20.05.2017 / 00:46