A gerência de entrada e saída no
Linux é implementada através de device drivers, um device para cada dispositivo. Os device drivers são acoplados ao sistema operacional quando o kernel é gerado. Sempre que um novo dispositivo é acrescentado ao sistema, o driver correspondente deve ser acoplado ao núcleo. O acesso a dispositivos é na forma de arquivos especiais.
No Linux, todas as operações de E/S são realizadas como uma seqüência de bytes, não existindo o conceito de registro ou métodos de acesso. Dessa forma, as system calls de E/S podem manipular qualquer tipo de dispositivo de forma uniforme.
Os arquivos especiais podem ser acessados da mesma forma que qualquer outro arquivo, utilizando simplesmente as system calls de leitura e gravação. O Linux trabalha com dois tipos de operações de entrada e saída: uma orientada a blocos e outra orientada a caracter.
As operações orientadas a bloco estão geralmente associadas a dispositivos com altas taxas de transferência, como discos, e têm o objetivo de minimizar o número de transferências entre o dispositivo e a memória, utilizando buffer caches (vide figura a seguir). Por exemplo, quando uma operação de leitura a disco é realizada, um bloco é transferido para a memória e, posteriormente, processado.
Programa
↓
Sistema de Arquivo
↓
Buffer cachê
↓
device driver
↓
Disco
Dispositivos orientados a caracteres estão associados normalmente a dispositivos lentos, como terminais, onde a taxa de transferência entre o dispositivo e a memória é realizada caracter à caracter.
Redirecionamento de entrada e saída
O usuário pode, através do redirecionamento de E/S, redefinir de onde um comando ou programa receberá sua entrada e para onde enviará sua saída. A entrada de um comando são os dados sobre os quais o comando irá operar. Estes dados podem vir de um arquivo especificado pelo usuário, de um arquivo de sistema, do terminal ou da saída de outro comando. A saída de um comando é o resultado da operação que ele realiza sobre a entrada. A saída dos comandos pode ser impressa na tela do terminal, enviada a um arquivo, ou servir de entrada para outro comando.
Um comando Linux, normalmente requer uma entrada (em geral, um arquivo) e uma saída, a fim de exibir os resultados. Quando nenhum nome de arquivo é especificado, o shell admite que o teclado do usuário será sua entrada. O teclado é considerado a entrada padrão do sistema. E quando alguns resultados precisam ser exibidos, o shell assume que a tela será a saída padrão do sistema.