9.4. Les fichiers « spéciaux  » : fichiers mode bloc et caractère

Nous avons déjà mentionné que ces fichiers peuvent être soit des fichiers créés par le système, soit des périphériques de votre machine, et que le contenu des fichiers en mode bloc était gardé en mémoire alors que tel n'était pas le cas des fichiers en mode caractère. Pour illustrer ceci, insérez une disquette quelconque dans le lecteur et tapez la commande suivante deux fois de suite :

$ dd if=/dev/fd0 of=/dev/null

Vous pouvez observer la chose suivante : le premier lancement de la commande enclenche la lecture du contenu complet de la disquette alors qu'aucun accès au lecteur de disquette n'est effectué lors de la deuxième entrée de la commande. La résolution du mystère est simple : le contenu de la disquette a été gardé en mémoire lors de la première exécution de la commande (à la condition évidente que vous n'ayez pas changé de disquette entre temps !).

Et si, maintenant, vous avez envie de passer à l'impression d'un fichier important de cette façon :

$ cat /un/gros/fichier/imprimable/quelque/part >/dev/lp0

Que vous la tapiez une, deux ou cinquante fois, la commande prendra en fait autant de temps. Tout simplement parce que /dev/lp0 est un fichier en mode caractère et que son contenu n'est donc pas gardé en mémoire.

Le fait que le contenu des fichiers en mode bloc soit gardé en mémoire comporte un effet de bord agréable : non seulement les lectures sont gardées en mémoire, mais également les écritures. Cela permet aux écritures sur disque d'être asynchrones : quand vous écrivez un fichier sur disque, l'opération d'écriture elle-même ne sera pas accomplie immédiatement. Elle n'aura lieu que quand GNU/Linux le décidera.

Enfin, chacun de ces fichiers spéciaux possède un indice majeur et un indice mineur. Sur la sortie d'un ls -l, ils apparaissent en lieu et place de la taille, puisque celle-ci n'entre pas en ligne de compte pour de tels fichiers :

 ls -l /dev/hda /dev/lp0
brw-rw----    1 root     disk       3,   0 May  5  1998 /dev/hda
crw-rw----    1 root     daemon     6,   0 May  5  1998 /dev/lp0

Les indices majeur et mineur de /dev/hda sont, respectivement 3 et 0, ici, et 6 et 0 pour /dev/lp0. Notez que ces chiffres correspondent chacun à une catégorie de fichier ; il peut ainsi exister un fichier en mode caractère ayant 3 pour majeur et 0 pour mineur (un tel fichier existe  : c'est /dev/ttyp0), et un fichier en mode bloc ayant 6 pour majeur et 0 pour mineur. Ces chiffres existent pour une raison bien simple : ils permettent à GNU/Linux d'associer les bonnes opérations aux bons fichiers (et donc aux périphériques auxquels ces fichiers se réfèrent). En effet, on ne contrôle pas un lecteur de disquettes de la même façon que, par exemple, un disque dur SCSI.


Tux sur Étoile de MandrakeSoft Linux est une marque déposée de Linus Torvalds. Toutes les autres marques et copyrights sont la propriété de leurs auteurs respectifs.
Sauf mention contraire, tout le contenu de ces pages et toutes les images sont Copyright MandrakeSoft S.A. et MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/