web-dev-qa-db-fra.com

Que sont les fichiers spéciaux de caractères et de blocs spéciaux dans un système Unix?

En quoi les fichiers spéciaux de caractères et les fichiers spéciaux de blocage sont-ils différents des fichiers ordinaires dans un système de type Unix? Pourquoi sont-ils appelés respectivement "caractère spécial" et "bloc spécial"?

71
Geek

Lorsqu'un programme lit ou écrit des données à partir d'un fichier, les requêtes vont à un pilote du noyau. Si le fichier est un fichier normal, les données sont gérées par un pilote de système de fichiers et elles sont généralement stockées dans des zones sur un disque ou un autre support de stockage, et les données qui sont lues à partir d'un fichier sont celles qui ont été précédemment écrites à cet endroit. Il existe d'autres types de fichiers pour lesquels différentes choses se produisent.

Lorsque des données sont lues ou écrites dans un fichier de périphérique, la demande est traitée par le pilote de ce périphérique. Chaque fichier de périphérique a un numéro associé qui identifie le pilote à utiliser. Ce que l'appareil fait avec les données est sa propre affaire.

Les périphériques de bloc (également appelés fichiers spéciaux de bloc) se comportent généralement un peu comme des fichiers ordinaires: ils sont un tableau d'octets, et la valeur qui est lue à un emplacement donné est la dernière valeur qui y a été écrite. Les données du périphérique de bloc peuvent être mises en cache dans la mémoire et relues à partir du cache; les écritures peuvent être mises en mémoire tampon. Les périphériques de bloc sont normalement recherchés (c'est-à-dire qu'il existe une notion de position à l'intérieur du fichier que l'application peut changer). Le nom "périphérique de bloc" vient du fait que le matériel correspondant lit et écrit généralement un bloc entier à la fois (par exemple un secteur sur un disque dur).

Les périphériques de caractères (également appelés fichiers spéciaux de caractères) se comportent comme des canaux, des ports série, etc. Leur écriture ou leur lecture est une action immédiate. Ce que le conducteur fait avec les données est sa propre entreprise. L'écriture d'un octet sur un périphérique de caractères peut entraîner son affichage à l'écran, sa sortie sur un port série, sa conversion en son, ... La lecture d'un octet à partir d'un périphérique peut entraîner l'attente de l'entrée du port série, peut renvoyer une valeur aléatoire octet (/dev/urandom), ... Le nom "dispositif de caractères" vient du fait que chaque caractère est traité individuellement.

Voir Wikipedia et Comprendre/dev et ses sous-répertoires et fichiers pour plus d'informations.

Ils pointent vers un pilote et peuvent être créés par [mknod][1]. En regardant sa page de manuel, il semble que les périphériques de bloc soient tamponnés tandis que les périphériques de caractères ne sont pas tamponnés. Les périphériques de bloc ont une "taille de bloc" qui indique la taille des blocs qui sont accessibles. (pour les périphériques de stockage, la taille des blocs est généralement comprise entre 512 B et 4 Ko). Les périphériques de stockage et la mémoire sont généralement accessibles en tant que périphériques blocs, tandis que les périphériques tels que les ports série et les terminaux sont généralement accessibles en tant que périphériques de caractères.

Ils se trouvent généralement dans/dev (et ne peuvent pas fonctionner sur des partitions montées avec une option nodev (ou son équivalent))

Dans ls -l affiche deux nombres séparés par des virgules pour les appareils à l'endroit où se trouve normalement la taille. Ce sont les chiffres majeurs et mineurs, qui pointent vers le conducteur. Leur type est également indiqué par "c" ou "b" dans la colonne d'autorisation du ls -l production.

/ dev peut être rempli de plusieurs manières. Sur les versions récentes du noyau Linux dev est généralement utilisé, sur Solaris, il contient des liens vers/devices, qui est un système de fichiers devfs virtuel.

8
Gert van den Berg

Types de fichiers sous Unix/Linux: Fichiers ordinaires ou ordinaires, répertoires, fichiers (spéciaux) de périphériques, liens, canaux nommés et sockets.

Un fichier de périphérique (spécial) est une interface pour un pilote de périphérique qui apparaît dans un système de fichiers comme s'il s'agissait d'un fichier ordinaire. Ce sont des périphériques de caractères, des périphériques de bloc et des pseudo-périphériques (comme /dev/null).

Le caractère enverra un caractère à la fois, donc vous avez besoin d'une petite charge à transporter, mais devez faire de nombreuses demandes. Block-driven signifie que vous obtenez une grande collection de caractères (données) donc vous avez une charge ** plus importante mais vous devez faire moins de requêtes. Analogie: Essentiellement la même chose que l'achat de soda à la bouteille ou à la caisse.

La gestion par bloc est utile lorsque vous savez combien de données vous pouvez attendre, ce qui est souvent le cas avec les fichiers sur disque.

La gestion des caractères est plus pratique lorsque vous ne savez pas quand vos données s'arrêteront, vous pouvez donc les faire fonctionner jusqu'à ce que plus aucun caractère ne passe. Par exemple, une connexion Internet, car vous ne connaissez pas la taille du flux de données que vous recevrez du serveur.

Par exemple:

  • Les pilotes de périphériques de caractères sont des fichiers spéciaux permettant au système d'exploitation de communiquer avec les périphériques d'entrée/sortie. Exemples: Clavier, souris, moniteur, cartes audio ou graphiques et braille.
  • Les périphériques de bloc sont destinés à communiquer avec les périphériques de stockage et sont capables de mettre en tampon la sortie et de stocker les données pour une récupération ultérieure. Exemples: Disque dur, mémoire.

Courtoisie

1
Premraj