A maioria dos dispositivos de hardware oferece uma API semelhante a um arquivo. Isso é feito porque torna o design do sistema operacional e o design de aplicativos mais simples. O sistema operacional precisa ter apenas uma API de arquivo e não uma API de terminal separada e uma API de disco separada e uma API de som separada, e assim por diante. Os aplicativos que não usam recursos específicos de um determinado tipo de hardware podem usar a API de arquivo sem se importar se estão acessando um arquivo regular ou um dispositivo de hardware.
Muitos recursos de hardware são específicos de um tipo de dispositivo. Os aplicativos podem invocar esses recursos por meio de ioctl . Algum hardware não aparece como arquivos porque você não pode simplesmente ler ou escrever um fluxo de bytes para ele. Por exemplo, o Linux não expõe as interfaces de rede como arquivos de dispositivos, porque as interfaces de rede funcionam em pacotes, não em bytes individuais.
Historicamente, os terminais eram dispositivos de hardware. Atualmente, a maioria dos terminais é fornecida por emuladores, seja em um ambiente gráfico ou através da rede. No entanto, até pseudo-terminais aparecem como dispositivos de hardware, porque o kernel contém um tratamento especial para rastrear quais processos estão sendo executados em qual terminal.
Em todas as variantes do unix, /dev/tty
significa “o terminal atual para este processo". Em outras palavras, sempre que um processo abre esse arquivo, ele designa o terminal de controle do processo. . Isso permite que um processo interaja através de seu terminal, mesmo quando seus descritores de entrada e saída padrão foram redirecionados.
Cada terminal possui um arquivo de dispositivo associado, que é um terminal de hardware (tty, por exemplo, /dev/tty1
, /dev/tty2
,… para os consoles virtuais em modo texto no Linux ou /dev/ttyS0
,… para portas seriais em Linux) ou um terminal emulado (pty, abreviação de pseudo-terminal; /dev/pts/NUMBER
no Linux). Este é o arquivo através do qual os processos trocam dados com o driver ou emulador do terminal.
É porque os terminais são arquivos que você pode executar aplicativos e exibir sua saída para o terminal. Quando você executa um programa na linha de comando, por padrão, sua saída vai para o terminal, mas você pode redirecioná-lo para um arquivo.