Download Amministrare GNU/Linux

Transcript
1.2. L’ARCHITETTURA DEI FILE
7
Tipo di file
regular file
file regolare
-
directory
d
symbolic link
char device
block device
fifo o pipe
socket
cartella o direttorio
collegamento
simbolico
dispositivo a
caratteri
dispositivo a
blocchi
“coda” o “tubo”
“presa”
l
c
b
p
s
Descrizione
un file che contiene dei dati (ciò che si
intende normalmente per file).
un file che contiene una lista di nomi
associati a degli inode.
un file che contiene un riferimento ad un
altro file o directory.
un file che identifica una periferica ad
accesso a caratteri.
un file che identifica una periferica ad
accesso a blocchi.
un file speciale che identifica una linea di
comunicazione unidirezionale.
un file speciale che identifica una linea di
comunicazione bidirezionale.
Tabella 1.1: I vari tipi di file riconosciuti da Linux
parlarsi fra di loro. Dato che, come accennato in sez 1.1, i processi sono completamente separati,
può essere soltanto il kernel a fornire le funzionalità che permettano la comunicazione.
Questi file speciali sono due modalità diverse per realizzare una comunicazione fra processi
diversi; aprendo una fifo un processo può scrivervi sopra ed un altro processo che ha aperto
la fifo leggerà dall’altro capo quanto il primo ha scritto,16 niente verrà salvato su disco, ma
passerà tutto attraverso il kernel che consente questa comunicazione come attraverso un tubo
(da questo deriva il nome pipe). I socket fanno la stessa cosa ma consentono una comunicazione
bidirezionale, in cui il secondo processo può scrivere indietro, ed il primo leggere, quando invece
per le fifo il flusso dei dati è unidirezionale.
La possibilità di avere tutti questi tipi di file speciali è dovuta al fatto che, come accennavamo
in sez. 1.1.3, in Linux l’accesso ai file viene eseguito attraverso una interfaccia unificata, il Virtual
File System, che definisce una serie di operazioni generiche che sono le stesse per tutti gli oggetti
che essa gestisce; è questo che implementa la filosofia progettuale del tutto è un file.
Le principali operazioni sono riportate in tab. 1.2; ogni oggetto del sistema visto attraverso
il Virtual File System definisce la sua versione di queste operazioni. Come si può notare sono
definite sia operazioni generiche come la lettura e la scrittura, che più specialistiche, come lo
spostamento all’interno di un file.17 Quando si utilizzano le system call per accedere ad un file
sarà compito del kernel chiamare l’operazione relativa ad esso associata (che sarà ovviamente
diversa a seconda del tipo di file), o riportare un errore quando quest’ultima non sia definita
(ad esempio sul file di dispositivo associato alla seriale non si potrà mai utilizzare l’operazione
di spostamento llseek ).
Funzione
open
read
write
llseek
ioctl
readdir
Operazione
apre il file.
legge dal file.
scrive sul file.
si sposta all’interno del file.
accede alle operazioni di controllo.
legge il contenuto di una directory.
Tabella 1.2: Principali operazioni sui file definite nel VFS.
16
l’uso delle fifo su disco è in realtà abbastanza complesso e benché quasi sempre coinvolga due soli processi
(uno che scrive e uno che legge) si possono avere situazioni più complicate; la trattazione dell’argomento va oltre
gli scopi di queste dispense, chi fosse interessato può trovare delle spiegazioni dettagliate sull’argomento nella
sezione 12.1 di [GaPiL].
17
ce ne sono altre ancora più complesse, che non sono state riportate in tab. 1.2.