[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 181.   File speciali

Quando si studia un file system Unix, oggetti come directory, file di dati e collegamenti, sono abbastanza comprensibili, mentre tutto il resto viene indicato generalmente come trattarsi di file speciali. Questa definizione fa pensare a qualcosa di minore importanza, in realtà si tratta di componenti fondamentali di un sistema Unix, così come dei sistemi GNU.

In questo capitolo vengono riepilogati argomenti che sono già descritti in parte in altri capitoli, allo scopo di favorire il lettore. La tabella 181.1 elenca i programmi a cui si accenna in questo capitolo.

Tabella 181.1. Riepilogo dei programmi e dei file per la gestione dei file speciali.

Nome Descrizione
mkfifo Crea un file FIFO.
mknod Crea un file FIFO o un file di dispositivo.
/dev/MAKEDEV Script standard per la ricostruzione dei file di dispositivo standard.

Nell'ambito di questi file speciali, si distingue generalmente tra file FIFO (pipe con nome), file di dispositivo e socket di dominio Unix (ma in questo capitolo i socket di dominio Unix non vengono trattati; si veda eventualmente il capitolo 277 al riguardo).

181.1   File FIFO

Ciò che è noto comunemente come «pipe con nome», è un file che funziona da serbatoio FIFO. FIFO è acronimo di First in first out, ovvero, «il primo a entrare è il primo a uscire», che a volte viene indicato con il termine coda.

Si usano file di questo tipo per permettere a due processi di comunicare. Il primo apre il file in scrittura e vi aggiunge dati, il secondo lo apre in lettura e lo legge sequenzialmente.

181.1.1   Utilizzo di «mkfifo»

Il programma di servizio mkfifo(1) crea uno o più file FIFO (pipe con nome):

mkfifo [opzioni] file...
Opzione Descrizione
-m modalità_dei_permessi
--mode=modalità_dei_permessi
Questa opzione permette di specificare esplicitamente i permessi del file che viene creato. La modalità può essere espressa sia in forma numerica che simbolica, come è possibile fare con il programma chmod (175.2.5). Il valore predefinito di questi permessi è 06668, meno il valore della maschera dei permessi.

Nell'esempio seguente vengono mostrati una sequenza di comandi con i quali, creando due file FIFO, si ottiene lo stesso risultato di un condotto come cat mio_file | sort | lpr.

mkfifo fifo1 fifo2[Invio]

Crea due file FIFO: fifo1 e fifo2.

cat mio_file >> fifo1 &[Invio]

Invia mio_file a fifo1 senza attendere (&).

sort < fifo1 >> fifo2 &[Invio]

Esegue il riordino di quanto ottenuto da fifo1 e invia il risultato a fifo2 senza attendere (&).

lpr < fifo2[Invio]

Accoda la stampa di quanto ottenuto da fifo2.

181.2   File di dispositivo

I file di dispositivo sono riferimenti a funzionalità contenute nel kernel. Nei sistemi Unix, questi file di dispositivo devono indicare due numeri, detti primario e secondario (oppure major e minor, secondo la terminologia originale), dove il primo rappresenta il tipo di dispositivo e il secondo serve a identificare esattamente un dispositivo particolare. Questi numeri dipendono dal kernel e di conseguenza possono variare da un sistema operativo Unix all'altro.

Nei sistemi Unix si accede quindi ai dispositivi attraverso file speciali, che tradizionalmente sono contenuti nella directory /dev/. Anche i nomi che si danno a questi file possono variare da un sistema Unix all'altro; in certi casi ci sono piccole differenze tra le stesse distribuzioni GNU/Linux.(2)

Dal momento che questi file servono solo in quanto contengono i numeri primario e secondario di un certo dispositivo, potrebbero funzionare anche collocati al di fuori della loro directory tradizionale, utilizzando eventualmente nomi differenti. Questa possibilità viene sfruttata da alcune distribuzioni GNU/Linux, nella fase di installazione, quando nei dischetti di avvio vengono creati al volo i file di dispositivo necessari a completare l'operazione, utilizzando eventualmente la stessa directory temporanea.

I file di dispositivo si distinguono in due categorie, in base al fatto che l'hardware a cui corrispondono sia in grado di gestire un flusso di caratteri, presi ognuno singolarmente, oppure richieda che i dati siano raggruppati in blocchi di una dimensione determinata. Nel primo caso si parla di dispositivo a caratteri, mentre nel secondo di dispositivo a blocchi.

Dato che i dispositivi fisici sono gestiti attraverso file di dispositivo, l'accesso all'hardware viene controllato con i permessi che vengono dati a questi file. La gestione dei permessi è molto importante nell'impostazione che viene data al sistema ed è uno dei punti su cui si trovano le differenze significative tra le varie distribuzioni GNU/Linux. Inoltre, l'esistenza di utenti e gruppi fittizi, con nomi come floppy, sys, daemon e altri, dipende spesso da questa esigenza di controllo dell'accesso ai dispositivi.

181.2.1   Utilizzo di «mknod»

Il programma di servizio mknod (3) permette di creare un file FIFO oppure un file di dispositivo:

mknod [opzioni] file tipo [numero_primario numero_secondario]

Il tipo di file viene indicato attraverso una lettera, mentre i numeri primario e secondario sono richiesti solo quando non si tratta della creazione di un file FIFO. La creazione di file di dispositivo è riservata all'utente root.

Tipo Descrizione
p
La lettera p indica un file FIFO.
b
La lettera b indica un dispositivo a blocchi con memoria tampone (buffer).
c
La lettera c indica un dispositivo a caratteri con memoria tampone.
u
La lettera u indica un dispositivo a caratteri senza memoria tampone.
Opzione Descrizione
-m modalità_dei_permessi
--mode=modalità_dei_permessi
Questa opzione permette di specificare esplicitamente i permessi del file che viene creato. La modalità può essere espressa sia in forma numerica che simbolica, come è possibile fare con il programma chmod (175.2.5). Il valore predefinito di questi permessi è 06668, meno il valore della maschera dei permessi.

Segue la descrizione di alcuni esempi.

181.2.2   File «/dev/MAKEDEV»

Il file /dev/MAKEDEV è uno script molto importante che si occupa di ricreare i file di dispositivo, rispettando le convenzioni del proprio sistema particolare:

/dev/MAKEDEV dispositivo...

Infatti, non c'è solo il problema di definire il nome e i numeri primario e secondario: occorre anche stabilire i permessi corretti, l'utente e il gruppo proprietari. Trascurando questi particolari, si rischierebbe di aprire dei buchi, anche gravi, nella sicurezza del sistema.

In tal senso, questo script è diverso da un sistema operativo all'altro. Solo il nome e la collocazione sono definiti dallo standard generale dei sistemi Unix.

Generalmente si possono indicare come argomento uno o più nomi di file di dispositivo, senza il percorso. Questi dovrebbero essere creati nella directory corrente. Si vedano gli esempi successivi.

Normalmente, lo script riconosce al posto del nome di un file di dispositivo, il nome di un gruppo di questi. La tabella successiva riguarda alcuni nomi di gruppi di file che si utilizzano nella distribuzione GNU/Linux Debian.

Tabella 181.5. Alcuni nomi di gruppi di file di dispositivo nella distribuzione GNU/Linux Debian.

Nome Descrizione
generic
Crea i file di dispositivo più comuni.
usb
Crea i file di dispositivo utili per i componenti collegati attraverso un bus USB.
md
Crea i file di dispositivo utili per la gestione di dischi RAID gestiti via software.

Tabella 181.6. La lettera che appare all'inizio dei permessi dei file, quando si usa ls.

lettera Significato
-
Un file di dati puro e semplice.
d
Directory.
l
Collegamento simbolico.
p
File FIFO (pipe con nome).
c
Dispositivo a caratteri.
b
Dispositivo a blocchi.
s
Socket di dominio Unix.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) GNU core utilities   GNU GPL

2) Tuttavia, i nomi di riferimento dovrebbero essere quelli indicati nella documentazione interna ai sorgenti del kernel, precisamente il file sorgenti_linux/Documentation/devices.txt.

3) GNU core utilities   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome file_speciali.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!