9.5. File "speciali": file in modalità a caratteri e file in modalità a blocchi

Come abbiamo detto in precedenza, si tratta di file creati dal sistema oppure da periferiche collegate alla vostra macchina. Abbiamo anche menzionato il fatto che il contenuto di file in modalità a blocchi è bufferizzato, mentre quello di file in modalità a caratteri non lo è. Per meglio illustrare questo concetto, inserite un floppy nel drive e digitate il comando che segue due volte di seguito:

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

Potrete notare quanto segue: la prima volta che avete lanciato il comando è stato letto l'intero contenuto del floppy, ma la seconda volta non c'è stato nessun accesso allo stesso floppy. Questo accade perché, molto semplicemente, il contenuto del dischetto è stato memorizzato la prima volta che avete lanciato il comando -, e non avete cambiato dischetto nel frattempo.

Ma ora, se volete stampare un file di grandi dimensioni con questo metodo (sì, funzionerà):

$ cat /un/grande/file/da/stampare >/dev/lp0

il comando impiegherà esattamente la stessa quantità di tempo se lo lanciate una volta soltanto, due oppure cinquanta volte. Questo è dovuto al fatto che /dev/lp0 è un file in modalità a caratteri, e il suo contenuto non è bufferizzato.

Il fatto che i file in modalità a blocchi siano bufferizzati ha un effetto collaterale positivo: sono bufferizzate non solo le operazioni di lettura, ma anche quelle di scrittura. Ciò consente alle operazioni di scrittura su disco di essere asincrone: quando scrivete un file sul disco, l'operazione non viene effettuata immediatamente: viene portata a termine solo quando GNU/Linux decide che è il momento per farlo.

Ciascun file speciale, infine, ha un numero primario (major) e uno secondario (minor). Visualizzando il risultato di un comando ls -l, questi numeri compaiono al posto delle dimensioni, poiché le dimensioni sono irrilevanti per file di questo tipo:

 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

Qui il numero primario e il secondario di /dev/hda sono, rispettivamente, 3 e 0, mentre per /dev/lp0 sono rispettivamente 6 e 0. Notate che questi numeri sono unici per categoria di file, il che significa che può esserci un file in modalità a caratteri con numero primario 3 e secondario 0 (questo file esiste effettivamente: /dev/ttyp0), e, allo stesso modo, può esistere un file in modalità a blocchi con primario 6 e secondario 0. Questi numeri esistono per un motivo molto semplice: permettono a GNU/Linux di associare ai file (o, meglio, alle periferiche cui fanno riferimento questi file) le operazioni appropriate: un lettore floppy non viene gestito nello stesso modo di un disco rigido SCSI, ad esempio.


Tux on Star from MandrakeSoft Linux è un marchio registrato di Linus Torvalds. Tutti gli altri marchi e copyright appartengono ai rispettivi proprietari.
Se non diversamente specificato, i diritti di tutto il contenuto di queste pagine e di tutte le immagini sono proprietà di MandrakeSoft S.A. e MandrakeSoft Inc. 2001.
http://www.mandrakelinux.com/