Aggiornamenti del copyright all'anno nuovo, e risistemazione delle
[gapil.git] / filedir.tex
index ed7c7bc4576d4d03233bf774fc48db40bee68541..239c9950e51c5db9d8bcdc0ef509dbf7e1858d35 100644 (file)
@@ -1,6 +1,6 @@
 %% filedir.tex
 %%
-%% Copyright (C) 2000-2006 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2007 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -53,7 +53,7 @@ sez.~\ref{sec:file_arch_func}) ci sono due metodi sostanzialmente diversi per
 fare questa operazione.
 
 Come spiegato in sez.~\ref{sec:file_filesystem} l'accesso al contenuto di un
-file su disco avviene passando attraverso il suo inode\index{inode}, che è la
+file su disco avviene passando attraverso il suo \index{inode} inode, che è la
 struttura usata dal kernel che lo identifica univocamente all'interno di un
 singolo filesystem. Il nome del file che si trova nella voce di una directory
 è solo un'etichetta, mantenuta all'interno della directory, che viene
@@ -61,16 +61,16 @@ associata ad un puntatore che fa riferimento al suddetto inode.
 
 Questo significa che, fintanto che si resta sullo stesso filesystem, la
 realizzazione di un link è immediata, ed uno stesso file può avere tanti nomi
-diversi, dati da altrettante diverse associazioni allo stesso
-inode\index{inode} di etichette diverse in directory diverse. Si noti anche
-che nessuno di questi nomi viene ad assumere una particolare preferenza o
-originalità rispetto agli altri, in quanto tutti fanno comunque riferimento
-allo stesso inode\index{inode}.
+diversi, dati da altrettante diverse associazioni allo stesso \index{inode}
+inode di etichette diverse in directory diverse. Si noti anche che nessuno di
+questi nomi viene ad assumere una particolare preferenza o originalità
+rispetto agli altri, in quanto tutti fanno comunque riferimento allo stesso
+\index{inode} inode.
 
 Per aggiungere ad una directory una voce che faccia riferimento ad un
-inode\index{inode} già esistente si utilizza la funzione \func{link}; si suole
-chiamare questo tipo di associazione un collegamento diretto (o \textit{hard
-  link}).  Il prototipo della funzione è:
+\index{inode} inode già esistente si utilizza la funzione \func{link}; si
+suole chiamare questo tipo di associazione un collegamento diretto (o
+\textit{hard link}).  Il prototipo della funzione è:
 \begin{prototype}{unistd.h}
 {int link(const char *oldpath, const char *newpath)}
   Crea un nuovo collegamento diretto.
@@ -93,7 +93,7 @@ chiamare questo tipo di associazione un collegamento diretto (o \textit{hard
   \errval{ENOSPC}, \errval{EIO}.}
 \end{prototype}
 
-La funzione crea sul \itindex{pathname}\textit{pathname} \param{newpath} un
+La funzione crea sul \itindex{pathname} \textit{pathname} \param{newpath} un
 collegamento diretto al file indicato da \param{oldpath}.  Per quanto detto la
 creazione di un nuovo collegamento diretto non copia il contenuto del file, ma
 si limita a creare una voce nella directory specificata da \param{newpath} e
@@ -103,10 +103,10 @@ aggiungendo il nuovo nome ai precedenti. Si noti che uno stesso file pu
 essere così chiamato con vari nomi in diverse directory.
  
 Per quanto dicevamo in sez.~\ref{sec:file_filesystem} la creazione di un
-collegamento diretto è possibile solo se entrambi i
-\itindex{pathname}\textit{pathname} sono nello stesso filesystem; inoltre il
-filesystem deve supportare i collegamenti diretti (il meccanismo non è
-disponibile ad esempio con il filesystem \acr{vfat} di Windows).
+collegamento diretto è possibile solo se entrambi i \itindex{pathname}
+\textit{pathname} sono nello stesso filesystem; inoltre il filesystem deve
+supportare i collegamenti diretti (il meccanismo non è disponibile ad esempio
+con il filesystem \acr{vfat} di Windows).
 
 La funzione inoltre opera sia sui file ordinari che sugli altri oggetti del
 filesystem, con l'eccezione delle directory. In alcune versioni di Unix solo
@@ -153,31 +153,31 @@ suo prototipo 
   abbia privilegi sufficienti.}
 
 La funzione cancella il nome specificato da \param{pathname} nella relativa
-directory e decrementa il numero di riferimenti nel relativo
-inode\index{inode}. Nel caso di link simbolico cancella il link simbolico; nel
-caso di socket, fifo o file di dispositivo\index{file!di~dispositivo} rimuove
-il nome, ma come per i file i processi che hanno aperto uno di questi oggetti
+directory e decrementa il numero di riferimenti nel relativo \index{inode}
+inode. Nel caso di link simbolico cancella il link simbolico; nel caso di
+socket, fifo o file di dispositivo \index{file!di~dispositivo} rimuove il
+nome, ma come per i file i processi che hanno aperto uno di questi oggetti
 possono continuare ad utilizzarlo.
 
 Per cancellare una voce in una directory è necessario avere il permesso di
 scrittura su di essa, dato che si va a rimuovere una voce dal suo contenuto, e
 il diritto di esecuzione sulla directory che la contiene (affronteremo in
 dettaglio l'argomento dei permessi di file e directory in
-sez.~\ref{sec:file_access_control}). Se inoltre lo
-\itindex{sticky~bit}\textit{sticky bit} (vedi sez.~\ref{sec:file_sticky}) è
-impostato occorrerà anche essere proprietari del file o proprietari della
-directory (o root, per cui nessuna delle restrizioni è applicata).
+sez.~\ref{sec:file_access_control}). Se inoltre lo \itindex{sticky~bit}
+\textit{sticky bit} (vedi sez.~\ref{sec:file_special_perm}) è impostato
+occorrerà anche essere proprietari del file o proprietari della directory (o
+root, per cui nessuna delle restrizioni è applicata).
 
 Una delle caratteristiche di queste funzioni è che la creazione/rimozione del
 nome dalla directory e l'incremento/decremento del numero di riferimenti
-nell'inode\index{inode} devono essere effettuati in maniera atomica (si veda
+\index{inode} nell'inode devono essere effettuati in maniera atomica (si veda
 sez.~\ref{sec:proc_atom_oper}) senza possibili interruzioni fra le due
 operazioni. Per questo entrambe queste funzioni sono realizzate tramite una
 singola system call.
 
 Si ricordi infine che un file non viene eliminato dal disco fintanto che tutti
 i riferimenti ad esso sono stati cancellati: solo quando il \textit{link
-  count} mantenuto nell'inode\index{inode} diventa zero lo spazio occupato su
+  count} mantenuto \index{inode} nell'inode diventa zero lo spazio occupato su
 disco viene rimosso (si ricordi comunque che a questo si aggiunge sempre
 un'ulteriore condizione,\footnote{come vedremo in
   cap.~\ref{cha:file_unix_interface} il kernel mantiene anche una tabella dei
@@ -255,9 +255,9 @@ nello stesso filesystem) si usa invece la funzione \funcd{rename},\footnote{la
   \item[\errcode{EINVAL}] \param{newpath} contiene un prefisso di
     \param{oldpath} o più in generale si è cercato di creare una directory come
     sotto-directory di se stessa.
-  \item[\errcode{ENOTDIR}] Uno dei componenti dei
-    \itindex{pathname}\textit{pathname} non è una directory o \param{oldpath}
-    è una directory e \param{newpath} esiste e non è una directory.
+  \item[\errcode{ENOTDIR}] Uno dei componenti dei \itindex{pathname}
+    \textit{pathname} non è una directory o \param{oldpath} è una directory e
+    \param{newpath} esiste e non è una directory.
   \end{errlist} 
   ed inoltre \errval{EACCES}, \errval{EPERM}, \errval{EMLINK},
   \errval{ENOENT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP} e
@@ -269,7 +269,7 @@ necessario lo spostamento di un file fra directory diverse. Eventuali altri
 link diretti allo stesso file non vengono influenzati.
 
 Il comportamento della funzione è diverso a seconda che si voglia rinominare
-un file o una directory; se ci riferisce a un file allora \param{newpath}, se
+un file o una directory; se ci riferisce ad un file allora \param{newpath}, se
 esiste, non deve essere una directory (altrimenti si ha l'errore
 \errcode{EISDIR}). Nel caso \param{newpath} indichi un file esistente questo
 viene cancellato e rimpiazzato (atomicamente).
@@ -280,7 +280,7 @@ essere una directory vuota, altrimenti si avranno gli errori \errcode{ENOTDIR}
 \param{newpath} non può contenere \param{oldpath} altrimenti si avrà un errore
 \errcode{EINVAL}.
 
-Se \param{oldpath} si riferisce a un link simbolico questo sarà rinominato; se
+Se \param{oldpath} si riferisce ad un link simbolico questo sarà rinominato; se
 \param{newpath} è un link simbolico verrà cancellato come qualunque altro
 file.  Infine qualora \param{oldpath} e \param{newpath} siano due nomi dello
 stesso file lo standard POSIX prevede che la funzione non dia errore, e non
@@ -306,7 +306,7 @@ riferimento allo stesso file.
 \label{sec:file_symlink}
 
 Come abbiamo visto in sez.~\ref{sec:file_link} la funzione \func{link} crea
-riferimenti agli \index{inode}inode, pertanto può funzionare soltanto per file
+riferimenti agli \index{inode} inode, pertanto può funzionare soltanto per file
 che risiedono sullo stesso filesystem e solo per un filesystem di tipo Unix.
 Inoltre abbiamo visto che in Linux non è consentito eseguire un link diretto
 ad una directory.
@@ -456,7 +456,7 @@ directory porterebbe il comando ad esaminare \file{/boot}, \file{/boot/boot},
 \file{/boot/boot/boot} e così via.
 
 Per questo motivo il kernel e le librerie prevedono che nella risoluzione di
-un \itindex{pathname}\textit{pathname} possano essere seguiti un numero
+un \itindex{pathname} \textit{pathname} possano essere seguiti un numero
 limitato di link simbolici, il cui valore limite è specificato dalla costante
 \const{MAXSYMLINKS}. Qualora questo limite venga superato viene generato un
 errore ed \var{errno} viene impostata al valore \errcode{ELOOP}.
@@ -484,7 +484,7 @@ ci mostrerebbe invece l'esistenza di \file{temporaneo}.
 \label{sec:file_dir_creat_rem}
 
 Benché in sostanza le directory non siano altro che dei file contenenti
-elenchi di nomi ed \index{inode}inode, non è possibile trattarle come file
+elenchi di nomi ed \index{inode} inode, non è possibile trattarle come file
 ordinari e devono essere create direttamente dal kernel attraverso una
 opportuna system call.\footnote{questo permette anche, attraverso l'uso del
   VFS, l'utilizzo di diversi formati per la gestione dei suddetti elenchi.}
@@ -521,15 +521,15 @@ prototipo 
 
 La funzione crea una nuova directory vuota, che contiene cioè solo le due voci
 standard (\file{.} e \file{..}), con il nome indicato dall'argomento
-\param{dirname}. Il nome può essere indicato sia come
-\itindex{pathname}\textit{pathname} assoluto che relativo.
+\param{dirname}. Il nome può essere indicato sia come \itindex{pathname}
+\textit{pathname} assoluto che relativo.
 
 I permessi di accesso alla directory (vedi sez.~\ref{sec:file_access_control})
 sono specificati da \param{mode}, i cui possibili valori sono riportati in
 tab.~\ref{tab:file_permission_const}; questi sono modificati dalla maschera di
-creazione dei file (si veda sez.~\ref{sec:file_umask}).  La titolarità della
-nuova directory è impostata secondo quanto riportato in
-sez.~\ref{sec:file_ownership}.
+creazione dei file (si veda sez.~\ref{sec:file_perm_management}).  La
+titolarità della nuova directory è impostata secondo quanto riportato in
+sez.~\ref{sec:file_ownership_management}.
 
 La funzione per la cancellazione di una directory è \funcd{rmdir}, il suo
 prototipo è:
@@ -557,14 +557,14 @@ prototipo 
 
 La funzione cancella la directory \param{dirname}, che deve essere vuota (la
 directory deve cioè contenere soltanto le due voci standard \file{.} e
-\file{..}).  Il nome può essere indicato con il
-\itindex{pathname}\textit{pathname} assoluto o relativo.
+\file{..}).  Il nome può essere indicato con il \itindex{pathname}
+\textit{pathname} assoluto o relativo.
 
 La modalità con cui avviene la cancellazione è analoga a quella di
-\func{unlink}: fintanto che il numero di link all'inode\index{inode} della
+\func{unlink}: fintanto che il numero di link \index{inode} all'inode della
 directory non diventa nullo e nessun processo ha la directory aperta lo spazio
 occupato su disco non viene rilasciato. Se un processo ha la directory aperta
-la funzione rimuove il link all'inode\index{inode} e nel caso sia l'ultimo,
+la funzione rimuove il link \index{inode} all'inode e nel caso sia l'ultimo,
 pure le voci standard \file{.} e \file{..}, a questo punto il kernel non
 consentirà di creare più nuovi file nella directory.
 
@@ -574,9 +574,9 @@ consentir
 
 Finora abbiamo parlato esclusivamente di file, directory e link simbolici; in
 sez.~\ref{sec:file_file_types} abbiamo visto però che il sistema prevede pure
-degli altri tipi di file speciali, come i file di dispositivo
-\index{file!di~dispositivo} e le fifo (i socket sono un caso a parte, che
-tratteremo in cap.~\ref{cha:socket_intro}).
+degli altri tipi di file speciali, come i \index{file!di~dispositivo} file di
+dispositivo e le fifo (i socket sono un caso a parte, che tratteremo in
+cap.~\ref{cha:socket_intro}).
 
 La manipolazione delle caratteristiche di questi file e la loro cancellazione
 può essere effettuata con le stesse funzioni che operano sui file regolari; ma
@@ -611,7 +611,7 @@ creare file regolari e fifo; l'argomento \param{mode} specifica il tipo di
 file che si vuole creare ed i relativi permessi, secondo i valori riportati in
 tab.~\ref{tab:file_mode_flags}, che vanno combinati con un OR binario. I
 permessi sono comunque modificati nella maniera usuale dal valore di
-\var{umask} (si veda sez.~\ref{sec:file_umask}).
+\var{umask} (si veda sez.~\ref{sec:file_perm_management}).
 
 Per il tipo di file può essere specificato solo uno fra: \const{S\_IFREG} per
 un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un dispositivo
@@ -626,11 +626,11 @@ usando questa funzione; ma in Linux\footnote{la funzione non 
   codici di errore.} l'uso per la creazione di una fifo è consentito anche
 agli utenti normali.
 
-I nuovi inode\index{inode} creati con \func{mknod} apparterranno al
+I nuovi \index{inode} inode creati con \func{mknod} apparterranno al
 proprietario e al gruppo del processo che li ha creati, a meno che non si sia
 attivato il bit \acr{sgid} per la directory o sia stata attivata la semantica
-BSD per il filesystem (si veda sez.~\ref{sec:file_ownership}) in cui si va a
-creare l'inode\index{inode}.
+BSD per il filesystem (si veda sez.~\ref{sec:file_ownership_management}) in
+cui si va a creare \index{inode} l'inode.
 
 Per creare una fifo (un file speciale, su cui torneremo in dettaglio in
 sez.~\ref{sec:ipc_named_pipe}) lo standard POSIX specifica l'uso della funzione
@@ -659,7 +659,7 @@ modificati dal valore di \var{umask}.
 \label{sec:file_dir_read}
 
 Benché le directory alla fine non siano altro che dei file che contengono
-delle liste di nomi ed \index{inode}inode, per il ruolo che rivestono nella
+delle liste di nomi ed \index{inode} inode, per il ruolo che rivestono nella
 struttura del sistema, non possono essere trattate come dei normali file di
 dati. Ad esempio, onde evitare inconsistenze all'interno del filesystem, solo
 il kernel può scrivere il contenuto di una directory, e non può essere un
@@ -696,7 +696,7 @@ cap.~\ref{cha:files_std_interface}). La prima funzione di questa interfaccia 
 
 La funzione apre un \textit{directory stream} per la directory
 \param{dirname}, ritornando il puntatore ad un oggetto di tipo \type{DIR} (che
-è il tipo opaco\index{tipo!opaco} usato dalle librerie per gestire i
+è il \index{tipo!opaco} tipo opaco usato dalle librerie per gestire i
 \textit{directory stream}) da usare per tutte le operazioni successive, la
 funzione inoltre posiziona lo stream sulla prima voce contenuta nella
 directory.
@@ -768,7 +768,7 @@ con i thread; il suo prototipo 
 \end{functions}
 
 La funzione restituisce in \param{result} (come
-\itindex{value~result~argument}\textit{value result argument}) l'indirizzo
+\itindex{value~result~argument} \textit{value result argument}) l'indirizzo
 dove sono stati salvati i dati, che di norma corrisponde a quello della
 struttura precedentemente allocata e specificata dall'argomento \param{entry}
 (anche se non è assicurato che la funzione usi lo spazio fornito dall'utente).
@@ -783,7 +783,7 @@ terminata da uno zero,\footnote{lo standard POSIX non specifica una lunghezza,
   ma solo un limite \const{NAME\_MAX}; in SVr4 la lunghezza del campo è
   definita come \code{NAME\_MAX+1} che di norma porta al valore di 256 byte
   usato anche in Linux.} ed il campo \var{d\_ino}, che contiene il numero di
-\index{inode}inode cui il file è associato (di solito corrisponde al campo
+\index{inode} inode cui il file è associato (di solito corrisponde al campo
 \var{st\_ino} di \struct{stat}).
 
 \begin{figure}[!htb]
@@ -1065,8 +1065,8 @@ resta la stessa quando viene creato un processo figlio (vedi
 sez.~\ref{sec:proc_fork}), la directory corrente della shell diventa anche la
 directory corrente di qualunque comando da essa lanciato.
 
-In genere il kernel tiene traccia per ciascun processo dell'inode\index{inode}
-della directory di lavoro, per ottenere il \textit{pathname}
+In genere il kernel tiene traccia per ciascun processo \index{inode}
+dell'inode della directory di lavoro, per ottenere il \textit{pathname}
 occorre usare una apposita funzione di libreria, \funcd{getcwd}, il cui
 prototipo è:
 \begin{prototype}{unistd.h}{char *getcwd(char *buffer, size\_t size)}
@@ -1165,8 +1165,8 @@ In molte occasioni 
 sembri semplice, in realtà il problema è più sottile di quanto non appaia a
 prima vista. Infatti anche se sembrerebbe banale generare un nome a caso e
 creare il file dopo aver controllato che questo non esista, nel momento fra il
-controllo e la creazione si ha giusto lo spazio per una possibile \textit{race
-  condition}\itindex{race~condition} (si ricordi quanto visto in
+controllo e la creazione si ha giusto lo spazio per una possibile
+\itindex{race~condition} \textit{race condition} (si ricordi quanto visto in
 sez.~\ref{sec:proc_race_cond}).
 
 Le \acr{glibc} provvedono varie funzioni per generare nomi di file temporanei,
@@ -1210,7 +1210,7 @@ la prima valida delle seguenti:
 \begin{itemize*}
 \item La variabile di ambiente \const{TMPNAME} (non ha effetto se non è
   definita o se il programma chiamante è \itindex{suid~bit} \acr{suid} o
-  \itindex{sgid~bit} \acr{sgid}, vedi sez.~\ref{sec:file_suid_sgid}).
+  \itindex{sgid~bit} \acr{sgid}, vedi sez.~\ref{sec:file_special_perm}).
 \item il valore dell'argomento \param{dir} (se diverso da \val{NULL}).
 \item Il valore della costante \const{P\_tmpdir}.
 \item la directory \file{/tmp}.
@@ -1245,8 +1245,8 @@ POSIX definisce la funzione \funcd{tmpfile}, il cui prototipo 
 automaticamente cancellato alla sua chiusura o all'uscita dal programma. Lo
 standard non specifica in quale directory verrà aperto il file, ma le
 \acr{glibc} prima tentano con \const{P\_tmpdir} e poi con \file{/tmp}. Questa
-funzione è rientrante e non soffre di problemi di \textit{race
-  condition}\itindex{race~condition}.
+funzione è rientrante e non soffre di problemi di \itindex{race~condition}
+\textit{race condition}.
 
 Alcune versioni meno recenti di Unix non supportano queste funzioni; in questo
 caso si possono usare le vecchie funzioni \funcd{mktemp} e \func{mkstemp} che
@@ -1267,7 +1267,7 @@ il suo prototipo 
 \end{prototype}
 \noindent dato che \param{template} deve poter essere modificata dalla
 funzione non si può usare una stringa costante.  Tutte le avvertenze riguardo
-alle possibili \textit{race condition}\itindex{race~condition} date per
+alle possibili \itindex{race~condition} \textit{race condition} date per
 \func{tmpnam} continuano a valere; inoltre in alcune vecchie implementazioni
 il valore usato per sostituire le \code{XXXXXX} viene formato con il \acr{pid}
 del processo più una lettera, il che mette a disposizione solo 26 possibilità
@@ -1317,8 +1317,8 @@ In OpenBSD 
 \end{prototype}
 \noindent la directory è creata con permessi \code{0700} (al solito si veda
 cap.~\ref{cha:file_unix_interface} per i dettagli); dato che la creazione
-della directory è sempre esclusiva i precedenti problemi di \textit{race
-  condition}\itindex{race~condition} non si pongono.
+della directory è sempre esclusiva i precedenti problemi di
+\itindex{race~condition} \textit{race condition} non si pongono.
 
 
 \section{La manipolazione delle caratteristiche dei file}
@@ -1326,24 +1326,24 @@ della directory 
 
 Come spiegato in sez.~\ref{sec:file_filesystem} tutte le informazioni generali
 relative alle caratteristiche di ciascun file, a partire dalle informazioni
-relative al controllo di accesso, sono mantenute nell'inode\index{inode}.
+relative al controllo di accesso, sono mantenute \index{inode} nell'inode.
 
 Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
 usando la funzione \func{stat}, che permette l'accesso a tutti i dati
-memorizzati nell'inode\index{inode}; esamineremo poi le varie funzioni usate
+memorizzati \index{inode} nell'inode; esamineremo poi le varie funzioni usate
 per manipolare tutte queste informazioni (eccetto quelle che riguardano la
 gestione del controllo di accesso, trattate in in
 sez.~\ref{sec:file_access_control}).
 
 
-\subsection{Le funzioni \func{stat}, \func{fstat} e \func{lstat}}
+\subsection{La lettura delle caratteristiche dei file}
 \label{sec:file_stat}
 
 La lettura delle informazioni relative ai file è fatta attraverso la famiglia
 delle funzioni \func{stat} (\funcd{stat}, \funcd{fstat} e \funcd{lstat});
 questa è la funzione che ad esempio usa il comando \cmd{ls} per poter ottenere
-e mostrare tutti i dati dei file. I prototipi di queste funzioni sono i
-seguenti:
+e mostrare tutti i dati relativi ad un file. I prototipi di queste funzioni
+sono i seguenti:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/stat.h} 
@@ -1398,8 +1398,9 @@ tab.~\ref{tab:intro_primitive_types}, e dichiarati in \file{sys/types.h}).
 
 Come riportato in tab.~\ref{tab:file_file_types} in Linux oltre ai file e alle
 directory esistono altri oggetti che possono stare su un filesystem.  Il tipo
-di file è ritornato dalla \func{stat} come maschera binaria nel campo
-\var{st\_mode} (che contiene anche le informazioni relative ai permessi).
+di file è ritornato dalla funzione \func{stat} come maschera binaria nel campo
+\var{st\_mode} (che contiene anche le informazioni relative ai permessi) di
+una struttura \struct{stat}.
 
 Dato che il valore numerico può variare a seconda delle implementazioni, lo
 standard POSIX definisce un insieme di macro per verificare il tipo di file,
@@ -1493,9 +1494,10 @@ poi si effettua il confronto con la combinazione di tipi scelta.
 \subsection{Le dimensioni dei file}
 \label{sec:file_file_size}
 
-Il campo \var{st\_size} contiene la dimensione del file in byte (se si tratta
-di un file regolare, nel caso di un link simbolico la dimensione è quella del
-\itindex{pathname}\textit{pathname} che contiene, per le fifo è sempre nullo).
+Il campo \var{st\_size} di una struttura \struct{stat} contiene la dimensione
+del file in byte, se si tratta di un file regolare. Nel caso di un link
+simbolico la dimensione è quella del \itindex{pathname} \textit{pathname} che
+il link stesso contiene; per le fifo questo campo è sempre nullo.
 
 Il campo \var{st\_blocks} definisce la lunghezza del file in blocchi di 512
 byte. Il campo \var{st\_blksize} infine definisce la dimensione preferita per
@@ -1546,8 +1548,8 @@ dimensione si possono usare le due funzioni \funcd{truncate} e
   per \func{truncate} si hanno:
   \begin{errlist}
   \item[\errcode{EACCES}] il file non ha permesso di scrittura o non si ha il
-    permesso di esecuzione una delle directory del
-    \itindex{pathname}\textit{pathname}.
+    permesso di esecuzione una delle directory del \itindex{pathname}
+    \textit{pathname}.
   \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione.
   \end{errlist}
   ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
@@ -1565,9 +1567,9 @@ zeri (e in genere si ha la creazione di un \textit{hole} nel file).
 \label{sec:file_file_times}
 
 Il sistema mantiene per ciascun file tre tempi. Questi sono registrati
-nell'inode\index{inode} insieme agli altri attributi del file e possono essere
-letti tramite la funzione \func{stat}, che li restituisce attraverso tre campi
-della struttura \struct{stat} di fig.~\ref{fig:file_stat_struct}. Il
+\index{inode} nell'inode insieme agli altri attributi del file e possono
+essere letti tramite la funzione \func{stat}, che li restituisce attraverso
+tre campi della struttura \struct{stat} di fig.~\ref{fig:file_stat_struct}. Il
 significato di detti tempi e dei relativi campi è riportato nello schema in
 tab.~\ref{tab:file_file_times}, dove è anche riportato un esempio delle
 funzioni che effettuano cambiamenti su di essi.
@@ -1597,16 +1599,18 @@ Il primo punto da tenere presente 
 modifica (il \textit{modification time} \var{st\_mtime}) e il tempo di
 cambiamento di stato (il \textit{change time} \var{st\_ctime}). Il primo
 infatti fa riferimento ad una modifica del contenuto di un file, mentre il
-secondo ad una modifica dell'inode\index{inode}; siccome esistono molte
+secondo ad una modifica \index{inode} dell'inode; siccome esistono molte
 operazioni (come la funzione \func{link} e molte altre che vedremo in seguito)
-che modificano solo le informazioni contenute nell'inode\index{inode} senza
-toccare il file, diventa necessario l'utilizzo di un altro tempo.
+che modificano solo le informazioni contenute \index{inode} nell'inode senza
+toccare il contenuto del file, diventa necessario l'utilizzo di un altro
+tempo.
 
-Il sistema non tiene conto dell'ultimo accesso all'inode\index{inode},
+Il sistema non tiene conto dell'ultimo accesso \index{inode} all'inode,
 pertanto funzioni come \func{access} o \func{stat} non hanno alcuna influenza
 sui tre tempi. Il tempo di ultimo accesso (ai dati) viene di solito usato per
 cancellare i file che non servono più dopo un certo lasso di tempo (ad esempio
-\cmd{leafnode} cancella i vecchi articoli sulla base di questo tempo).
+il programma \cmd{leafnode} cancella i vecchi articoli sulla base di questo
+tempo).
 
 Il tempo di ultima modifica invece viene usato da \cmd{make} per decidere
 quali file necessitano di essere ricompilati o (talvolta insieme anche al
@@ -1708,16 +1712,12 @@ esiste. Per questo motivo quando si copia un file, a meno di preservare
 esplicitamente i tempi (ad esempio con l'opzione \cmd{-p} di \cmd{cp}) esso
 avrà sempre il tempo corrente come data di ultima modifica.
 
-
-\subsection{La funzione \func{utime}}
-\label{sec:file_utime}
-
 I tempi di ultimo accesso e modifica possono essere cambiati usando la
 funzione \funcd{utime}, il cui prototipo è:
 \begin{prototype}{utime.h}
 {int utime(const char *filename, struct utimbuf *times)} 
 
-Cambia i tempi di ultimo accesso e modifica dell'inode\index{inode}
+Cambia i tempi di ultimo accesso e modifica \index{inode} dell'inode
 specificato da \param{filename} secondo i campi \var{actime} e \var{modtime}
 di \param{times}. Se questa è \val{NULL} allora viene usato il tempo corrente.
 
@@ -1753,7 +1753,7 @@ del file (o si hanno i privilegi di amministratore).
 
 Si tenga presente che non è comunque possibile specificare il tempo di
 cambiamento di stato del file, che viene comunque cambiato dal kernel tutte le
-volte che si modifica l'inode\index{inode} (quindi anche alla chiamata di
+volte che si modifica \index{inode} l'inode (quindi anche alla chiamata di
 \func{utime}).  Questo serve anche come misura di sicurezza per evitare che si
 possa modificare un file nascondendo completamente le proprie tracce.  In
 realtà la cosa resta possibile, se si è in grado di accedere al file di
@@ -1827,15 +1827,15 @@ rispettivamente al proprietario, al gruppo, a tutti gli altri.
   \label{fig:file_perm_bit}
 \end{figure}
 
-I restanti tre bit (noti come \itindex{suid~bit}\textit{suid bit},
-\itindex{sgid~bit}\textit{sgid bit}, e \itindex{sticky~bit} \textit{sticky
+I restanti tre bit (noti come \itindex{suid~bit} \textit{suid bit},
+\itindex{sgid~bit} \textit{sgid bit}, e \itindex{sticky~bit} \textit{sticky
   bit}) sono usati per indicare alcune caratteristiche più complesse del
 meccanismo del controllo di accesso su cui torneremo in seguito (in
-sez.~\ref{sec:file_suid_sgid} e sez.~\ref{sec:file_sticky}); lo schema di
-allocazione dei bit è riportato in fig.~\ref{fig:file_perm_bit}.
+sez.~\ref{sec:file_special_perm}); lo schema di allocazione dei bit è
+riportato in fig.~\ref{fig:file_perm_bit}.
 
 Anche i permessi, come tutte le altre informazioni pertinenti al file, sono
-memorizzati nell'inode\index{inode}; in particolare essi sono contenuti in
+memorizzati \index{inode} nell'inode; in particolare essi sono contenuti in
 alcuni bit del campo \var{st\_mode} della struttura \struct{stat} (si veda di
 nuovo fig.~\ref{fig:file_stat_struct}).
 
@@ -1881,15 +1881,15 @@ limiteremo ad un riassunto delle regole generali, entrando nei dettagli pi
 avanti.
 
 La prima regola è che per poter accedere ad un file attraverso il suo
-\itindex{pathname}\textit{pathname} occorre il permesso di esecuzione in
+\itindex{pathname} \textit{pathname} occorre il permesso di esecuzione in
 ciascuna delle directory che compongono il \textit{pathname}; lo stesso vale
 per aprire un file nella directory corrente (per la quale appunto serve il
 diritto di esecuzione).
 
 Per una directory infatti il permesso di esecuzione significa che essa può
-essere attraversata nella risoluzione del \itindex{pathname}\textit{pathname},
-ed è distinto dal permesso di lettura che invece implica che si può leggere il
-contenuto della directory.
+essere attraversata nella risoluzione del \itindex{pathname}
+\textit{pathname}, ed è distinto dal permesso di lettura che invece implica
+che si può leggere il contenuto della directory.
 
 Questo significa che se si ha il permesso di esecuzione senza permesso di
 lettura si potrà lo stesso aprire un file in una directory (se si hanno i
@@ -1922,7 +1922,7 @@ simbolico tutti i permessi come concessi; utente e gruppo a cui esso
 appartiene vengono pure ignorati quando il link viene risolto, vengono
 controllati solo quando viene richiesta la rimozione del link e quest'ultimo è
 in una directory con lo \itindex{sticky~bit} \textit{sticky bit} impostato (si
-veda sez.~\ref{sec:file_sticky}).
+veda sez.~\ref{sec:file_special_perm}).
 
 La procedura con cui il kernel stabilisce se un processo possiede un certo
 permesso (di lettura, scrittura o esecuzione) si basa sul confronto fra
@@ -1937,7 +1937,7 @@ effettivo e gli eventuali group-ID supplementari del processo.\footnote{in
 
 Per una spiegazione dettagliata degli identificatori associati ai processi si
 veda sez.~\ref{sec:proc_perms}; normalmente, a parte quanto vedremo in
-sez.~\ref{sec:file_suid_sgid}, l'user-ID effettivo e il group-ID effettivo
+sez.~\ref{sec:file_special_perm}, l'user-ID effettivo e il group-ID effettivo
 corrispondono ai valori dell'\acr{uid} e del \acr{gid} dell'utente che ha
 lanciato il processo, mentre i group-ID supplementari sono quelli dei gruppi
 cui l'utente appartiene.
@@ -1978,8 +1978,8 @@ processo appartiene ad un gruppo appropriato, in questo caso i permessi per
 tutti gli altri non vengono controllati.
 
 
-\subsection{I bit \acr{suid} e \acr{sgid}}
-\label{sec:file_suid_sgid}
+\subsection{I bit dei permessi speciali}
+\label{sec:file_special_perm}
 
 \itindbeg{suid~bit}
 \itindbeg{sgid~bit}
@@ -2032,10 +2032,10 @@ riportati in tab.~\ref{tab:file_mode_flags}.
 Gli stessi bit vengono ad assumere in significato completamente diverso per le
 directory, normalmente infatti Linux usa la convenzione di SVr4 per indicare
 con questi bit l'uso della semantica BSD nella creazione di nuovi file (si
-veda sez.~\ref{sec:file_ownership} per una spiegazione dettagliata al
-proposito).
+veda sez.~\ref{sec:file_ownership_management} per una spiegazione dettagliata
+al proposito).
 
-Infine Linux utilizza il bit \acr{sgid} per unulteriore estensione mutuata
+Infine Linux utilizza il bit \acr{sgid} per un'ulteriore estensione mutuata
 da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostato senza che lo
 sia anche il corrispondente bit di esecuzione viene utilizzato per attivare
 per quel file il \itindex{mandatory~locking} \textit{mandatory locking}
@@ -2045,8 +2045,6 @@ sez.~\ref{sec:file_mand_locking}).
 \itindend{suid~bit}
 \itindend{sgid~bit}
 
-\subsection{Il bit \textsl{sticky}}
-\label{sec:file_sticky}
 
 \itindbeg{sticky~bit}
 
@@ -2098,52 +2096,15 @@ consapevolmente, cancellare i file temporanei creati degli altri utenti.
 
 \itindend{sticky~bit}
 
-
-\subsection{La titolarità di nuovi file e directory}
-\label{sec:file_ownership}
-
-Vedremo in sez.~\ref{sec:file_base_func} con quali funzioni si possono creare
-nuovi file, in tale occasione vedremo che è possibile specificare in sede di
-creazione quali permessi applicare ad un file, però non si può indicare a
-quale utente e gruppo esso deve appartenere.  Lo stesso problema si presenta
-per la creazione di nuove directory (procedimento descritto in
-sez.~\ref{sec:file_dir_creat_rem}).
-
-Lo standard POSIX prescrive che l'\acr{uid} del nuovo file corrisponda
-all'user-ID effettivo del processo che lo crea; per il \acr{gid} invece prevede
-due diverse possibilità:
-\begin{itemize*}
-\item il \acr{gid} del file corrisponde al group-ID effettivo del processo.
-\item il \acr{gid} del file corrisponde al \acr{gid} della directory in cui
-  esso è creato.
-\end{itemize*}
-in genere BSD usa sempre la seconda possibilità, che viene per questo chiamata
-semantica BSD. Linux invece segue quella che viene chiamata semantica SVr4; di
-norma cioè il nuovo file viene creato, seguendo la prima opzione, con il
-\acr{gid} del processo, se però la directory in cui viene creato il file ha il
-bit \acr{sgid} impostato allora viene usata la seconda opzione.
-
-Usare la semantica BSD ha il vantaggio che il \acr{gid} viene sempre
-automaticamente propagato, restando coerente a quello della directory di
-partenza, in tutte le sotto-directory. 
-
-La semantica SVr4 offre la possibilità di scegliere, ma per ottenere lo stesso
-risultato di coerenza che si ha con BSD necessita che per le nuove directory
-venga anche propagato anche il bit \acr{sgid}. Questo è il comportamento
-predefinito del comando \cmd{mkdir}, ed è in questo modo ad esempio che Debian
-assicura che le sotto-directory create nella home di un utente restino sempre
-con il \acr{gid} del gruppo primario dello stesso.
-
-
-\subsection{La funzione \func{access}}
-\label{sec:file_access}
+\subsection{Le funzioni per la gestione dei permessi dei file}
+\label{sec:file_perm_management}
 
 Come visto in sez.~\ref{sec:file_access_control} il controllo di accesso ad un
 file viene fatto utilizzando l'user-ID ed il group-ID effettivo del processo;
 ci sono casi però in cui si può voler effettuare il controllo con l'user-ID
 reale ed il group-ID reale, vale a dire usando i valori di \acr{uid} e
 \acr{gid} relativi all'utente che ha lanciato il programma, e che, come
-accennato in sez.~\ref{sec:file_suid_sgid} e spiegato in dettaglio in
+accennato in sez.~\ref{sec:file_special_perm} e spiegato in dettaglio in
 sez.~\ref{sec:proc_perms}, non è detto siano uguali a quelli effettivi.
 
 Per far questo si può usare la funzione \funcd{access}, il cui prototipo è:
@@ -2206,10 +2167,6 @@ eseguendo un programma coi privilegi di un altro utente (ad esempio attraverso
 l'uso del \itindex{suid~bit} \textit{suid bit}) che vuole controllare se
 l'utente originale ha i permessi per accedere ad un certo file.
 
-
-\subsection{Le funzioni \func{chmod} e \func{fchmod}}
-\label{sec:file_chmod}
-
 Per cambiare i permessi di un file il sistema mette ad disposizione due
 funzioni \funcd{chmod} e \funcd{fchmod}, che operano rispettivamente su un
 filename e su un file descriptor, i loro prototipi sono:
@@ -2303,19 +2260,19 @@ in particolare accade che:
   \textit{sticky bit}, se l'user-ID effettivo del processo non è zero esso
   viene automaticamente cancellato (senza notifica di errore) qualora sia
   stato indicato in \param{mode}.
-\item per quanto detto in sez.~\ref{sec:file_ownership} riguardo la creazione
-  dei nuovi file, si può avere il caso in cui il file creato da un processo è
-  assegnato a un gruppo per il quale il processo non ha privilegi. Per evitare
-  che si possa assegnare il bit \itindex{sgid~bit} \acr{sgid} ad un file
-  appartenente a un gruppo per cui non si hanno diritti, questo viene
+\item per quanto detto in sez.~\ref{sec:file_ownership_management} riguardo la
+  creazione dei nuovi file, si può avere il caso in cui il file creato da un
+  processo è assegnato ad un gruppo per il quale il processo non ha privilegi.
+  Per evitare che si possa assegnare il bit \itindex{sgid~bit} \acr{sgid} ad
+  un file appartenente ad un gruppo per cui non si hanno diritti, questo viene
   automaticamente cancellato da \param{mode} (senza notifica di errore)
   qualora il gruppo del file non corrisponda a quelli associati al processo
   (la cosa non avviene quando l'user-ID effettivo del processo è zero).
 \end{enumerate}
 
 Per alcuni filesystem\footnote{i filesystem più comuni (\textsl{ext2},
-  \textsl{ext3}, \textsl{reiser}) supportano questa caratteristica, che è
-  mutuata da BSD.} è inoltre prevista unulteriore misura di sicurezza, volta
+  \textsl{ext3}, \textsl{reiserfs}) supportano questa caratteristica, che è
+  mutuata da BSD.} è inoltre prevista un'ulteriore misura di sicurezza, volta
 a scongiurare l'abuso dei \itindex{suid~bit} bit \acr{suid} e \acr{sgid}; essa
 consiste nel cancellare automaticamente questi bit dai permessi di un file
 qualora un processo che non appartenga all'amministratore\footnote{per la
@@ -2324,9 +2281,6 @@ qualora un processo che non appartenga all'amministratore\footnote{per la
 utente malizioso scopre un file \acr{suid} su cui può scrivere, un'eventuale
 modifica comporterà la perdita di questo privilegio.
 
-\subsection{La funzione \func{umask}}
-\label{sec:file_umask}
-
 Le funzioni \func{chmod} e \func{fchmod} ci permettono di modificare i
 permessi di un file, resta però il problema di quali sono i permessi assegnati
 quando il file viene creato. Le funzioni dell'interfaccia nativa di Unix, come
@@ -2368,8 +2322,41 @@ voluti.  Di norma questo valore viene impostato una volta per tutte al login a
 $022$, e gli utenti non hanno motivi per modificarlo.
 
 
-\subsection{Le funzioni \func{chown}, \func{fchown} e \func{lchown}}
-\label{sec:file_chown}
+
+\subsection{La gestione della titolarità dei file}
+\label{sec:file_ownership_management}
+
+Vedremo in sez.~\ref{sec:file_base_func} con quali funzioni si possono creare
+nuovi file, in tale occasione vedremo che è possibile specificare in sede di
+creazione quali permessi applicare ad un file, però non si può indicare a
+quale utente e gruppo esso deve appartenere.  Lo stesso problema si presenta
+per la creazione di nuove directory (procedimento descritto in
+sez.~\ref{sec:file_dir_creat_rem}).
+
+Lo standard POSIX prescrive che l'\acr{uid} del nuovo file corrisponda
+all'user-ID effettivo del processo che lo crea; per il \acr{gid} invece prevede
+due diverse possibilità:
+\begin{itemize*}
+\item il \acr{gid} del file corrisponde al group-ID effettivo del processo.
+\item il \acr{gid} del file corrisponde al \acr{gid} della directory in cui
+  esso è creato.
+\end{itemize*}
+in genere BSD usa sempre la seconda possibilità, che viene per questo chiamata
+semantica BSD. Linux invece segue quella che viene chiamata semantica SVr4; di
+norma cioè il nuovo file viene creato, seguendo la prima opzione, con il
+\acr{gid} del processo, se però la directory in cui viene creato il file ha il
+bit \acr{sgid} impostato allora viene usata la seconda opzione.
+
+Usare la semantica BSD ha il vantaggio che il \acr{gid} viene sempre
+automaticamente propagato, restando coerente a quello della directory di
+partenza, in tutte le sotto-directory. 
+
+La semantica SVr4 offre la possibilità di scegliere, ma per ottenere lo stesso
+risultato di coerenza che si ha con BSD necessita che per le nuove directory
+venga anche propagato anche il bit \acr{sgid}. Questo è il comportamento
+predefinito del comando \cmd{mkdir}, ed è in questo modo ad esempio che Debian
+assicura che le sotto-directory create nella home di un utente restino sempre
+con il \acr{gid} del gruppo primario dello stesso.
 
 Come per i permessi, il sistema fornisce anche delle funzioni che permettano
 di cambiare utente e gruppo cui il file appartiene; le funzioni in questione
@@ -2522,6 +2509,8 @@ non 
 riferimento soltanto alla combinazione di bit per i quali il valore è
 riportato esplicitamente.
 
+% TODO intrudurre nuova sezione sulle funzionalità di sicurezza avanzate, con
+% dentro chroot, gli attributi estesi, ecc.
 
 \subsection{La funzione \func{chroot}}
 \label{sec:file_chroot}