[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


62. File speciali

Quando si studia un filesystem 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 di GNU/Linux.

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

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 dispositivi standard.

Tabella 62.1: Riepilogo dei programmi e dei file per la gestione dei file speciali.

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

62.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», e 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.

62.1.1 $ mkfifo

mkfifo [<opzioni>] <file>...

`mkfifo' 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' ( 58.2.5). Il valore predefinito di questi permessi è 0666, 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'.

62.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 particolare dispositivo. 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 questi 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. *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, e di solito viene utilizzata per questo la 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 questi file di dispositivo, l'accesso all'hardware viene controllato con i permessi che vengono dati a questi file. La gestione di questi 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.

62.2.1 # mknod

mknod [<opzioni>] <file> <tipo> [<numero-primario> <numero-secondario>]

`mknod' permette di creare un file FIFO oppure un file di dispositivo. Il tipo di file viene indicato attraverso una lettera, e i numeri primario e secondario sono richiesti 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' ( 58.2.5). Il valore predefinito di questi permessi è 0666, 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.

62.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, gravi, nella sicurezza del sistema.

In questo 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 IDE, assegnandogli tutti gli altri attributi corretti.

62.3 Riepilogo dei tipi di file

A titolo riepilogativo, è il caso di ricordare la lettera che appare all'inizio dei permessi dei file, quando si usa `ls':

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


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

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


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]