[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 79.   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 79.1 elenca i programmi a cui si accenna in questo capitolo.

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

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

Tra questi file speciali, si distingue generalmente tra pipe con nome, o FIFO, e file di dispositivo.(1)

79.1   Pipe con nome

Una 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.

79.1.1   $ mkfifo

mkfifo [opzioni] file...

mkfifo (2) crea uno o più file FIFO (pipe con nome).

Alcune opzioni

-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 (74.2.5). Il valore predefinito di questi permessi è 06668, meno il valore della maschera dei permessi.

Esempi

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

mkfifo fifo1 fifo2

Crea due file FIFO: fifo1 e fifo2.

cat mio_file >> fifo1 &

Invia mio_file a fifo1 senza attendere (&).

sort < fifo1 >> fifo2 &

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

lpr < fifo2

Accoda la stampa di quanto ottenuto da fifo2.

79.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 anche tra le stesse distribuzioni GNU/Linux.(3)

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.

79.2.1   # mknod

mknod [opzioni] file tipo [numero_primario numero_secondario]

mknod (4) permette di creare un file FIFO oppure un file di dispositivo. 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

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.

Alcune opzioni

-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 (74.2.5). Il valore predefinito di questi permessi è 06668, meno il valore della maschera dei permessi.

Esempi

mknod fifo1 p

Crea il file FIFO fifo1 esattamente come si potrebbe fare utilizzando il programma mkfifo.

mknod -m 0600 tty9 c 4 9

Crea il file di dispositivo a caratteri tty9, nella directory corrente, utilizzando dei permessi opportuni.

mknod -m 0660 hda1 b 3 1

Crea il file di dispositivo a blocchi hda1, nella directory corrente, utilizzando dei permessi opportuni.

79.2.2   /dev/MAKEDEV

/dev/MAKEDEV dispositivo...

Si tratta di uno script molto importante che si occupa di ricreare i file di dispositivo, rispettando le convenzioni del proprio sistema particolare. 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.

Esempi

/dev/MAKEDEV tty1

Crea il file di dispositivo corrispondente alla prima console virtuale, assegnandogli tutti gli altri attributi corretti.

/dev/MAKEDEV hda

Crea il file di dispositivo corrispondente al primo disco fisso ATA, assegnandogli tutti gli altri attributi corretti.

Tabella 79.2. 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 Pipe con nome, o FIFO.
c Dispositivo a caratteri.
b Dispositivo a blocchi.
s Socket.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

1) In realtà, esiste un altro tipo di file speciale: il socket. Per il momento, questo argomento non viene trattato.

2) GNU file management utilities   GNU GPL

3) Tuttavia, i nomi di riferimento dovrebbero essere quelli indicati nella documentazione interna ai sorgenti del kernel, precisamente il file <file:///usr/src/linux/Documentation/devices.txt>.

4) GNU file management utilities   GNU GPL


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

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]