Quando um programa lê ou grava dados de um arquivo, os pedidos vão para um driver de kernel. Se o arquivo for um arquivo normal, os dados serão manipulados por um driver de sistema de arquivos e serão normalmente armazenados em zonas em um disco ou outra mídia de armazenamento, e os dados lidos em um arquivo são os que foram gravados anteriormente naquele local. Existem outros tipos de arquivos para os quais coisas diferentes acontecem.
Quando os dados são lidos ou gravados em um arquivo de dispositivo, a solicitação é tratada pelo driver desse dispositivo. Cada arquivo de dispositivo possui um número associado que identifica o driver a ser usado. O que o dispositivo faz com os dados é da sua conta.
Os dispositivos de bloco (também chamados de arquivos especiais de bloco) geralmente se comportam muito como arquivos comuns: eles são uma matriz de bytes e o valor lido em um determinado local é o valor que foi gravado lá. Os dados do dispositivo de bloco podem ser armazenados em cache na memória e lidos de volta do cache; as gravações podem ser armazenadas em buffer. Dispositivos de bloco são normalmente procurados (ou seja, há uma noção de posição dentro do arquivo que o aplicativo pode alterar). O nome “dispositivo de bloco” vem do fato de que o hardware correspondente geralmente lê e grava um bloco inteiro de cada vez (por exemplo, um setor em um disco rígido).
Dispositivos de caracteres (também chamados de arquivos especiais de caracteres) se comportam como pipes, portas seriais, etc. Escrever ou ler para eles é uma ação imediata. O que o motorista faz com os dados é seu próprio negócio. A gravação de um byte em um dispositivo de caracteres pode fazer com que ele seja exibido na tela, gerado em uma porta serial, convertido em um som, ... Ler um byte de um dispositivo pode fazer com que a porta serial espere pela entrada, pode retornar um aleatório byte ( /dev/urandom
), ... O nome "dispositivo de caractere" vem do fato de que cada caractere é tratado individualmente.
Veja Wikipedia e Entendendo / dev e seus subdiretórios e arquivos para mais informações.