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 a quest'ultimo. Questo succede perché, molto semplicemente, il contenuto del dischetto è stato bufferizzato 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 file in modalità a caratteri, e il suo contenuto non è bufferizzato.
Il fatto che i file 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.
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 and 0. Notate che questi numeri sono unici per categoria di file, il che significa che può esserci un file 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 questi file alle operazioni appropriate (alle periferiche, cioè, cui si riferiscono questi file). Un lettore floppy non viene gestito nello stesso modo di un disco rigido SCSI, ad esempio.
Indietro | Partenza | Avanti |
Pipe "anonime" e pipe con nome | Risali | I link simbolici e le limitazioni degli "hard" link |