Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/doc/library/linux/AppLinux/al74.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:38 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 13:21:49 2007 Êîäèðîâêà: Ïîèñêîâûå ñëîâà: ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï |
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.
La tabella 56.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. |
Tra questi file speciali, si distingue generalmente tra pipe con nome, o FIFO, e file di dispositivo.
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.
mkfifo [<opzioni>] <file>... |
mkfifo
crea uno o piÛ file FIFO (pipe con nome).
|
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
(
53.2.5). Il valore predefinito di questi permessi Õ 0666, 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 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
.
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.
*1*
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 singoli caratteri oppure richieda che i dati siano raggruppati in blocchi di una determinata dimensione. 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.
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
.
p |
La lettera p
indica un file FIFO.
b |
La lettera b
indica un dispositivo a blocchi (con buffer).
c |
La lettera c
indica un dispositivo a caratteri con buffer.
u |
La lettera u
indica un dispositivo a caratteri senza buffer.
|
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
(
53.2.5). Il valore predefinito di questi permessi Õ 0666, meno il valore della maschera dei permessi.
$
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.
/dev/MAKEDEV <dispositivo>... |
Si tratta di uno script molto importante che si occupa di ricreare i file di dispositivo, rispettando le convenzioni del proprio particolare sistema. 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 indicare il percorso. Questi dovrebbero essere creati nella directory corrente.
#
/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.
A titolo riepilogativo, Õ il caso di ricordare la lettera che appare all'inizio dei permessi dei file, quando si usa ls
:
rappresenta 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.
---------------------------
Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ pluto.linux.it
1.) 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
.