Lavoro fatto a casa senza ADSL, correzioni multiple agli indici, documentato
[gapil.git] / filedir.tex
index b9d4017a162b614b339aa303842e2193827932c7..1912e1df8261ea4f57632dba91b5524396d84ce5 100644 (file)
@@ -1,9 +1,9 @@
 %% filedir.tex
 %%
-%% Copyright (C) 2000-2004 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2005 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 "Prefazione",
+%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
 %% with no Front-Cover Texts, and with no Back-Cover Texts.  A copy of the
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
@@ -93,20 +93,20 @@ chiamare questo tipo di associazione un collegamento diretto (o \textit{hard
   \errval{ENOSPC}, \errval{EIO}.}
 \end{prototype}
 
-La funzione crea sul 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 ad aumentare di uno
-il numero di riferimenti al file (riportato nel campo \var{st\_nlink} della
-struttura \struct{stat}, vedi sez.~\ref{sec:file_stat}) aggiungendo il nuovo
-nome ai precedenti. Si noti che uno stesso file può essere così chiamato con
-vari nomi in diverse directory.
+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
+ad aumentare di uno il numero di riferimenti al file (riportato nel campo
+\var{st\_nlink} della struttura \struct{stat}, vedi sez.~\ref{sec:file_stat})
+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 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
@@ -155,18 +155,19 @@ suo prototipo 
 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\index{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.
+caso di socket\index{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 \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_sticky}) è
+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
@@ -182,11 +183,11 @@ 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
   file aperti nei vari processi, che a sua volta contiene i riferimenti agli
-  inode ad essi relativi. Prima di procedere alla cancellazione dello spazio
-  occupato su disco dal contenuto di un file il kernel controlla anche questa
-  tabella, per verificare che anche in essa non ci sia più nessun riferimento
-  all'inode in questione.} e cioè che non ci siano processi che abbiano il
-suddetto file aperto).
+  \index{inode} inode ad essi relativi. Prima di procedere alla cancellazione
+  dello spazio occupato su disco dal contenuto di un file il kernel controlla
+  anche questa tabella, per verificare che anche in essa non ci sia più nessun
+  riferimento all'inode in questione.} e cioè che non ci siano processi che
+abbiano il suddetto file aperto).
 
 Questa proprietà viene spesso usata per essere sicuri di non lasciare file
 temporanei su disco in caso di crash dei programmi; la tecnica è quella di
@@ -255,9 +256,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 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
@@ -306,7 +307,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 inode\index{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.
@@ -445,9 +446,9 @@ punta di nuovo a \file{/boot}.\footnote{il loop mostrato in
   fig.~\ref{fig:file_link_loop} è un usato per poter permettere a \cmd{grub}
   (un bootloader in grado di leggere direttamente da vari filesystem il file
   da lanciare come sistema operativo) di vedere i file contenuti nella
-  directory \file{/boot} con lo stesso pathname con cui verrebbero visti dal
-  sistema operativo, anche se essi si trovano, come accade spesso, su una
-  partizione separata (che \cmd{grub}, all'avvio, vede come radice).}
+  directory \file{/boot} con lo stesso \textit{pathname} con cui verrebbero
+  visti dal sistema operativo, anche se essi si trovano, come accade spesso,
+  su una partizione separata (che \cmd{grub}, all'avvio, vede come radice).}
 
 Questo può causare problemi per tutti quei programmi che effettuano la
 scansione di una directory senza tener conto dei link simbolici, ad esempio se
@@ -456,10 +457,10 @@ 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 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}.
+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}.
 
 Un punto da tenere sempre presente è che, come abbiamo accennato, un link
 simbolico può fare riferimento anche ad un file che non esiste; ad esempio
@@ -484,11 +485,12 @@ 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 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.}  La funzione usata
-per creare una directory è \funcd{mkdir}, ed il suo prototipo è:
+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.}
+La funzione usata per creare una directory è \funcd{mkdir}, ed il suo
+prototipo è:
 \begin{functions}
   \headdecl{sys/stat.h}
   \headdecl{sys/types.h}
@@ -520,8 +522,8 @@ per creare una directory 
 
 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 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
@@ -539,9 +541,9 @@ prototipo 
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\errcode{EPERM}] Il filesystem non supporta la cancellazione di
-    directory, oppure la directory che contiene \param{dirname} ha lo sticky
-    bit impostato e l'user-ID effettivo del processo non corrisponde al
-    proprietario della directory.
+    directory, oppure la directory che contiene \param{dirname} ha lo
+    \itindex{sticky~bit} \textit{sticky bit} impostato e l'user-ID effettivo
+    del processo non corrisponde al proprietario della directory.
   \item[\errcode{EACCES}] Non c'è il permesso di scrittura per la directory
     che contiene la directory che si vuole cancellare, o non c'è il permesso
     di attraversare (esecuzione) una delle directory specificate in
@@ -556,7 +558,8 @@ 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 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
@@ -572,10 +575,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\index{socket} sono un caso a parte, che
-vedremo in cap.~\ref{cha:socket_intro}).
+degli altri tipi di file speciali, come i file di dispositivo
+\index{file!di~dispositivo} e le fifo (i socket\index{socket} sono un caso a
+parte, che vedremo 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
@@ -584,7 +586,7 @@ di queste funzioni 
 \begin{functions}
   \headdecl{sys/types.h}
   \headdecl{sys/stat.h}
-  \headdecl{fnctl.h}
+  \headdecl{fcntl.h}
   \headdecl{unistd.h}
   \funcdecl{int mknod(const char *pathname, mode\_t mode, dev\_t dev)} 
   
@@ -594,7 +596,7 @@ di queste funzioni 
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o
-    il filesystem su cui si è cercato di creare \func{pathname} non supporta
+    il filesystem su cui si è cercato di creare \param{pathname} non supporta
     l'operazione.
   \item[\errcode{EINVAL}] Il valore di \param{mode} non indica un file, una
     fifo o un dispositivo.
@@ -658,11 +660,12 @@ 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 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 processo a
-inserirvi direttamente delle voci con le usuali funzioni di scrittura. 
+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
+processo a inserirvi direttamente delle voci con le usuali funzioni di
+scrittura.
 
 Ma se la scrittura e l'aggiornamento dei dati delle directory è compito del
 kernel, sono molte le situazioni in cui i processi necessitano di poterne
@@ -765,11 +768,11 @@ con i thread; il suo prototipo 
     errore, gli errori sono gli stessi di \func{readdir}.}
 \end{functions}
 
-La funzione restituisce in \param{result} (come \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).
+La funzione restituisce in \param{result} (come
+\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).
 
 I vari campi di \struct{dirent} contengono le informazioni relative alle voci
 presenti nella directory; sia BSD che SVr4\footnote{POSIX prevede invece solo
@@ -781,8 +784,8 @@ 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
-inode cui il file è associato (di solito corrisponde al campo \var{st\_ino} di
-\struct{stat}).
+\index{inode}inode cui il file è associato (di solito corrisponde al campo
+\var{st\_ino} di \struct{stat}).
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -843,7 +846,7 @@ Il campo \var{d\_off} contiene invece la posizione della voce successiva della
 directory, mentre il campo \var{d\_reclen} la lunghezza totale della voce
 letta. Con questi due campi diventa possibile, determinando la posizione delle
 varie voci, spostarsi all'interno dello stream usando la funzione
-\func{seekdir},\footnote{sia questa funzione che \func{telldir}, sono
+\funcd{seekdir},\footnote{sia questa funzione che \func{telldir}, sono
   estensioni prese da BSD, non previste dallo standard POSIX.} il cui
 prototipo è:
 \begin{prototype}{dirent.h}{void seekdir(DIR *dir, off\_t offset)}
@@ -853,7 +856,7 @@ prototipo 
 La funzione non ritorna nulla e non segnala errori, è però necessario che il
 valore dell'argomento \param{offset} sia valido per lo stream \param{dir};
 esso pertanto deve essere stato ottenuto o dal valore di \var{d\_off} di
-\struct{dirent} o dal valore restituito dalla funzione \func{telldir}, che
+\struct{dirent} o dal valore restituito dalla funzione \funcd{telldir}, che
 legge la posizione corrente; il prototipo di quest'ultima è:
 \begin{prototype}{dirent.h}{off\_t telldir(DIR *dir)}
   Ritorna la posizione corrente in un \textit{directory stream}.
@@ -945,8 +948,8 @@ delle varie voci). Le \acr{glibc} prevedono come estensione\footnote{le glibc,
   a partire dalla versione 2.1, effettuano anche l'ordinamento alfabetico
   tenendo conto delle varie localizzazioni, usando \func{strcoll} al posto di
   \func{strcmp}.} anche \func{versionsort}, che ordina i nomi tenendo conto
-del numero di versione (cioè qualcosa per cui \file{file10} viene comunque
-dopo \func{file4}.)
+del numero di versione (cioè qualcosa per cui \texttt{file10} viene comunque
+dopo \texttt{file4}.)
 
 Un semplice esempio dell'uso di queste funzioni è riportato in
 fig.~\ref{fig:file_my_ls}, dove si è riportata la sezione principale di un
@@ -971,7 +974,7 @@ la stampa della sintassi, anch'essa omessa) ma il codice completo potr
 trovato coi sorgenti allegati nel file \file{myls.c}.
 
 In sostanza tutto quello che fa il programma, dopo aver controllato
-(\texttt{\small 10--13}) di avere almeno un parametro (che indicherà la
+(\texttt{\small 10--13}) di avere almeno un argomento (che indicherà la
 directory da esaminare) è chiamare (\texttt{\small 14}) la funzione
 \func{DirScan} per eseguire la scansione, usando la funzione \code{do\_ls}
 (\texttt{\small 20--26}) per fare tutto il lavoro. 
@@ -1039,11 +1042,14 @@ concluse con successo.
 \subsection{La directory di lavoro}
 \label{sec:file_work_dir}
 
+\itindbeg{pathname}
+
 A ciascun processo è associata una directory nel filesystem che è chiamata
 \textsl{directory corrente} o \textsl{directory di lavoro} (in inglese
 \textit{current working directory}) che è quella a cui si fa riferimento
-quando un pathname è espresso in forma relativa, dove il ``\textsl{relativa}''
-fa riferimento appunto a questa directory.
+quando un \itindsub{pathname}{relativo}\textit{pathname} è espresso in forma
+relativa, dove il ``\textsl{relativa}'' fa riferimento appunto a questa
+directory.
 
 Quando un utente effettua il login, questa directory viene impostata alla
 \textit{home directory} del suo account. Il comando \cmd{cd} della shell
@@ -1054,10 +1060,11 @@ 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 pathname occorre usare una apposita
-funzione di libreria, \funcd{getcwd}, il cui prototipo è:
+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)}
-  Legge il pathname della directory di lavoro corrente.
+  Legge il \textit{pathname} della directory di lavoro corrente.
   
   \bodydesc{La funzione restituisce il puntatore \param{buffer} se riesce,
     \val{NULL} se fallisce, in quest'ultimo caso la variabile
@@ -1066,43 +1073,44 @@ funzione di libreria, \funcd{getcwd}, il cui prototipo 
   \item[\errcode{EINVAL}] L'argomento \param{size} è zero e \param{buffer} non
     è nullo.
   \item[\errcode{ERANGE}] L'argomento \param{size} è più piccolo della
-    lunghezza del pathname
+    lunghezza del \textit{pathname}
   \item[\errcode{EACCES}] Manca il permesso di lettura o di ricerca su uno dei
-    componenti del pathname (cioè su una delle directory superiori alla
-    corrente).
+    componenti del \textit{pathname} (cioè su una delle directory superiori
+    alla corrente).
   \end{errlist}}
 \end{prototype}
 
-La funzione restituisce il pathname completo della directory di lavoro nella
-stringa puntata da \param{buffer}, che deve essere precedentemente allocata,
-per una dimensione massima di \param{size}.  Il buffer deve essere
-sufficientemente lungo da poter contenere il pathname completo più lo zero di
-terminazione della stringa. Qualora esso ecceda le dimensioni specificate con
-\param{size} la funzione restituisce un errore.
+La funzione restituisce il \textit{pathname} completo della directory di
+lavoro nella stringa puntata da \param{buffer}, che deve essere
+precedentemente allocata, per una dimensione massima di \param{size}.  Il
+buffer deve essere sufficientemente lungo da poter contenere il
+\textit{pathname} completo più lo zero di terminazione della stringa. Qualora
+esso ecceda le dimensioni specificate con \param{size} la funzione restituisce
+un errore.
 
 Si può anche specificare un puntatore nullo come
 \param{buffer},\footnote{questa è un'estensione allo standard POSIX.1,
   supportata da Linux.} nel qual caso la stringa sarà allocata automaticamente
 per una dimensione pari a \param{size} qualora questa sia diversa da zero, o
-della lunghezza esatta del pathname altrimenti. In questo caso ci si deve
-ricordare di disallocare la stringa una volta cessato il suo utilizzo.
+della lunghezza esatta del \textit{pathname} altrimenti. In questo caso ci si
+deve ricordare di disallocare la stringa una volta cessato il suo utilizzo.
 
 Di questa funzione esiste una versione \code{char *getwd(char *buffer)} fatta
 per compatibilità all'indietro con BSD, che non consente di specificare la
 dimensione del buffer; esso deve essere allocato in precedenza ed avere una
 dimensione superiore a \const{PATH\_MAX} (di solito 256 byte, vedi
 sez.~\ref{sec:sys_limits}); il problema è che in Linux non esiste una
-dimensione superiore per un pathname, per cui non è detto che il buffer sia
-sufficiente a contenere il nome del file, e questa è la ragione principale per
-cui questa funzione è deprecata.
+dimensione superiore per un \textit{pathname}, per cui non è detto che il
+buffer sia sufficiente a contenere il nome del file, e questa è la ragione
+principale per cui questa funzione è deprecata.
 
 Una seconda funzione simile è \code{char *get\_current\_dir\_name(void)} che è
 sostanzialmente equivalente ad una \code{getcwd(NULL, 0)}, con la sola
 differenza che essa ritorna il valore della variabile di ambiente \val{PWD},
-che essendo costruita dalla shell può contenere un pathname comprendente anche
-dei link simbolici. Usando \func{getcwd} infatti, essendo il pathname ricavato
-risalendo all'indietro l'albero della directory, si perderebbe traccia di ogni
-passaggio attraverso eventuali link simbolici.
+che essendo costruita dalla shell può contenere un \textit{pathname}
+comprendente anche dei link simbolici. Usando \func{getcwd} infatti, essendo
+il \textit{pathname} ricavato risalendo all'indietro l'albero della directory,
+si perderebbe traccia di ogni passaggio attraverso eventuali link simbolici.
 
 Per cambiare la directory di lavoro si può usare la funzione \funcd{chdir}
 (equivalente del comando di shell \cmd{cd}) il cui nome sta appunto per
@@ -1124,11 +1132,11 @@ Per cambiare la directory di lavoro si pu
 quale si hanno i permessi di accesso.
 
 Dato che anche le directory sono file, è possibile riferirsi ad esse anche
-tramite il file descriptor, e non solo tramite il pathname, per fare questo si
-usa \funcd{fchdir}, il cui prototipo è:
+tramite il file descriptor, e non solo tramite il \textit{pathname}, per fare
+questo si usa \funcd{fchdir}, il cui prototipo è:
 \begin{prototype}{unistd.h}{int fchdir(int fd)} 
   Identica a \func{chdir}, ma usa il file descriptor \param{fd} invece del
-  pathname.
+  \textit{pathname}.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, in caso di errore \var{errno} assumerà i valori \errval{EBADF} o
@@ -1140,6 +1148,8 @@ possibile (tutti gli altri sarebbero occorsi all'apertura di \param{fd}), 
 quello in cui il processo non ha il permesso di accesso alla directory
 specificata da \param{fd}.
 
+\itindend{pathname}
+
 
 
 \subsection{I file temporanei}
@@ -1150,7 +1160,7 @@ sembri semplice, in realt
 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}\index{race condition} (si ricordi quanto visto in
+  condition}\itindex{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,
@@ -1173,7 +1183,7 @@ massimo di \const{TMP\_MAX} volte. Al nome viene automaticamente aggiunto come
 prefisso la directory specificata da \const{P\_tmpdir}.
 
 Di questa funzione esiste una versione rientrante, \func{tmpnam\_r}, che non
-fa nulla quando si passa \val{NULL} come parametro. Una funzione simile,
+fa nulla quando si passa \val{NULL} come argomento. Una funzione simile,
 \funcd{tempnam}, permette di specificare un prefisso per il file
 esplicitamente, il suo prototipo è:
 \begin{prototype}{stdio.h}{char *tempnam(const char *dir, const char *pfx)}
@@ -1193,8 +1203,8 @@ directory per il file temporaneo (verificando che esista e sia accessibili),
 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 è \acr{suid} o \acr{sgid}, vedi
-  sez.~\ref{sec:file_suid_sgid}).
+  definita o se il programma chiamante è \itindex{suid~bit} \acr{suid} o
+  \itindex{sgid~bit} \acr{sgid}, vedi sez.~\ref{sec:file_suid_sgid}).
 \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}.
@@ -1210,7 +1220,7 @@ queste funzioni occorre sempre aprire il nuovo file in modalit
 esistente.
 
 Per evitare di dovere effettuare a mano tutti questi controlli, lo standard
-POSIX definisce la funzione \funcd{tempfile}, il cui prototipo è:
+POSIX definisce la funzione \funcd{tmpfile}, il cui prototipo è:
 \begin{prototype}{stdio.h}{FILE *tmpfile (void)}
   Restituisce un file temporaneo aperto in lettura/scrittura.
   
@@ -1230,13 +1240,13 @@ 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}\index{race condition}.
+  condition}\itindex{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
 modificano una stringa di input che serve da modello e che deve essere
 conclusa da 6 caratteri \code{X} che verranno sostituiti da un codice
-unico. La prima delle due è analoga a \funcd{tmpnam} e genera un nome casuale,
+unico. La prima delle due è analoga a \func{tmpnam} e genera un nome casuale,
 il suo prototipo è:
 \begin{prototype}{stlib.h}{char *mktemp(char *template)}
   Genera un filename univoco sostituendo le \code{XXXXXX} finali di
@@ -1251,7 +1261,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}\index{race condition} date per
+alle possibili \textit{race condition}\itindex{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à
@@ -1300,9 +1310,9 @@ In OpenBSD 
     più gli altri eventuali codici di errore di \func{mkdir}.}
 \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}\index{race condition} non si pongono.
+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.
 
 
 \section{La manipolazione delle caratteristiche dei files}
@@ -1441,9 +1451,9 @@ un'opportuna combinazione.
     \const{S\_IFCHR}  &  0020000 & dispositivo a caratteri \\
     \const{S\_IFIFO}  &  0010000 & fifo               \\
     \hline
-    \const{S\_ISUID}  &  0004000 & set UID bit   \\
-    \const{S\_ISGID}  &  0002000 & set GID bit   \\
-    \const{S\_ISVTX}  &  0001000 & sticky bit    \\
+    \const{S\_ISUID}  &  0004000 & set UID bit \itindex{suid~bit}  \\
+    \const{S\_ISGID}  &  0002000 & set GID bit \itindex{sgid~bit}  \\
+    \const{S\_ISVTX}  &  0001000 & sticky bit  \itindex{sticky~bit}\\
     \hline
 %    \const{S\_IRWXU}  &  00700   & bitmask per i permessi del proprietario  \\
     \const{S\_IRUSR}  &  00400   & il proprietario ha permesso di lettura   \\
@@ -1479,7 +1489,7 @@ poi si effettua il confronto con la combinazione di tipi scelta.
 
 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
-pathname che contiene, per le fifo è sempre nullo).
+\itindex{pathname}\textit{pathname} che contiene, per le fifo è 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
@@ -1530,7 +1540,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 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},
@@ -1713,7 +1724,7 @@ di \param{times}. Se questa 
 \end{prototype}
 
 La funzione prende come argomento \param{times} una struttura
-\struct{utimebuf}, la cui definizione è riportata in
+\struct{utimbuf}, la cui definizione è riportata in
 fig.~\ref{fig:struct_utimebuf}, con la quale si possono specificare i nuovi
 valori che si vogliono impostare per tempi.
 
@@ -1806,13 +1817,14 @@ rispettivamente al proprietario, al gruppo, a tutti gli altri.
   \centering
   \includegraphics[width=6cm]{img/fileperm}
   \caption{Lo schema dei bit utilizzati per specificare i permessi di un file
-    contenuti nel campo \var{st\_mode} di \struct{fstat}.}
+    contenuti nel campo \var{st\_mode} di \struct{stat}.}
   \label{fig:file_perm_bit}
 \end{figure}
 
-I restanti tre bit (noti come \acr{suid}, \acr{sgid}, e \textsl{sticky}) sono
-usati per indicare alcune caratteristiche più complesse del meccanismo del
-controllo di accesso su cui torneremo in seguito (in
+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}.
 
@@ -1862,14 +1874,16 @@ che si riferiscano a dei file, dei link simbolici o delle directory; qui ci
 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 pathname
-occorre il permesso di esecuzione in ciascuna delle directory che compongono
-il pathname; lo stesso vale per aprire un file nella directory corrente (per
-la quale appunto serve il diritto di esecuzione).
+La prima regola è che per poter accedere ad un file attraverso il suo
+\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 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
@@ -1901,8 +1915,8 @@ fa riferimento; per questo in genere il comando \cmd{ls} riporta per un link
 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 \textsl{sticky bit} impostato (si veda
-sez.~\ref{sec:file_sticky}).
+in una directory con lo \itindex{sticky~bit} \textit{sticky bit} impostato (si
+veda sez.~\ref{sec:file_sticky}).
 
 La procedura con cui il kernel stabilisce se un processo possiede un certo
 permesso (di lettura, scrittura o esecuzione) si basa sul confronto fra
@@ -1935,7 +1949,7 @@ di accesso sono i seguenti:
   \begin{itemize*}
   \item se il relativo\footnote{per relativo si intende il bit di user-read se
       il processo vuole accedere in scrittura, quello di user-write per
-      l'accesso in scrittura, etc.} bit dei permessi d'accesso dell'utente è
+      l'accesso in scrittura, ecc.} bit dei permessi d'accesso dell'utente è
     impostato, l'accesso è consentito
   \item altrimenti l'accesso è negato
   \end{itemize*}
@@ -1961,6 +1975,9 @@ tutti gli altri non vengono controllati.
 \subsection{I bit \acr{suid} e \acr{sgid}}
 \label{sec:file_suid_sgid}
 
+\itindbeg{suid~bit}
+\itindbeg{sgid~bit}
+
 Come si è accennato (in sez.~\ref{sec:file_perm_overview}) nei dodici bit del
 campo \var{st\_mode} di \struct{stat} che vengono usati per il controllo di
 accesso oltre ai bit dei permessi veri e propri, ci sono altri tre bit che
@@ -2018,24 +2035,28 @@ sia anche il corrispondente bit di esecuzione viene utilizzato per attivare
 per quel file il \textit{mandatory locking} (affronteremo questo argomento in
 dettaglio più avanti, in sez.~\ref{sec:file_mand_locking}).
 
+\itindend{suid~bit}
+\itindend{sgid~bit}
 
 \subsection{Il bit \textsl{sticky}}
 \label{sec:file_sticky}
 
+\itindbeg{sticky~bit}
+
 L'ultimo dei bit rimanenti, identificato dalla costante \const{S\_ISVTX}, è in
 parte un rimasuglio delle origini dei sistemi Unix. A quell'epoca infatti la
 memoria virtuale e l'accesso ai files erano molto meno sofisticati e per
 ottenere la massima velocità possibile per i programmi usati più comunemente
 si poteva impostare questo bit.
 
-L'effetto di questo bit era che il segmento di testo del programma (si veda
-sez.~\ref{sec:proc_mem_layout} per i dettagli) veniva scritto nella swap la
-prima volta che questo veniva lanciato, e vi permaneva fino al riavvio della
-macchina (da questo il nome di \textsl{sticky bit}); essendo la swap un file
-continuo indicizzato direttamente in questo modo si poteva risparmiare in
-tempo di caricamento rispetto alla ricerca del file su disco. Lo
-\textsl{sticky bit} è indicato usando la lettera \cmd{t} al posto della
-\cmd{x} nei permessi per gli altri.
+L'effetto di questo bit era che il \index{segmento!testo} segmento di testo
+del programma (si veda sez.~\ref{sec:proc_mem_layout} per i dettagli) veniva
+scritto nella swap la prima volta che questo veniva lanciato, e vi permaneva
+fino al riavvio della macchina (da questo il nome di \textsl{sticky bit});
+essendo la swap un file continuo o una partizione indicizzata direttamente si
+poteva risparmiare in tempo di caricamento rispetto alla ricerca attraverso la
+struttura del filesystem. Lo \textsl{sticky bit} è indicato usando la lettera
+\texttt{t} al posto della \texttt{x} nei permessi per gli altri.
 
 Ovviamente per evitare che gli utenti potessero intasare la swap solo
 l'amministratore era in grado di impostare questo bit, che venne chiamato
@@ -2043,8 +2064,8 @@ anche con il nome di \textit{saved text bit}, da cui deriva quello della
 costante.  Le attuali implementazioni di memoria virtuale e filesystem rendono
 sostanzialmente inutile questo procedimento.
 
-Benché ormai non venga più utilizzato per i file, lo \textsl{sticky bit} ha
-invece assunto un uso importante per le directory;\footnote{lo \textsl{sticky
+Benché ormai non venga più utilizzato per i file, lo \textit{sticky bit} ha
+invece assunto un uso importante per le directory;\footnote{lo \textit{sticky
     bit} per le directory è un'estensione non definita nello standard POSIX,
   Linux però la supporta, così come BSD e SVr4.} in questo caso se tale bit è
 impostato un file potrà essere rimosso dalla directory soltanto se l'utente ha
@@ -2061,13 +2082,15 @@ permessi infatti di solito sono i seguenti:
 $ ls -ld /tmp
 drwxrwxrwt    6 root     root         1024 Aug 10 01:03 /tmp
 \end{verbatim}%$
-quindi con lo \textsl{sticky bit} bit impostato. In questo modo qualunque
+quindi con lo \textit{sticky bit} bit impostato. In questo modo qualunque
 utente nel sistema può creare dei file in questa directory (che, come
 suggerisce il nome, è normalmente utilizzata per la creazione di file
 temporanei), ma solo l'utente che ha creato un certo file potrà cancellarlo o
 rinominarlo. In questo modo si evita che un utente possa, più o meno
 consapevolmente, cancellare i file temporanei creati degli altri utenti.
 
+\itindend{sticky~bit}
+
 
 \subsection{La titolarità di nuovi file e directory}
 \label{sec:file_ownership}
@@ -2173,8 +2196,8 @@ contrario (o di errore) ritorna -1.
 
 Un esempio tipico per l'uso di questa funzione è quello di un processo che sta
 eseguendo un programma coi privilegi di un altro utente (ad esempio attraverso
-l'uso del \acr{suid} bit) che vuole controllare se l'utente originale ha i
-permessi per accedere ad un certo file.
+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}}
@@ -2218,9 +2241,9 @@ file.
     \textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{S\_ISUID} & 04000 & set user ID \\
-    \const{S\_ISGID} & 02000 & set group ID \\
-    \const{S\_ISVTX} & 01000 & sticky bit \\
+    \const{S\_ISUID} & 04000 & set user ID \itindex{suid~bit} \\
+    \const{S\_ISGID} & 02000 & set group ID \itindex{sgid~bit}\\
+    \const{S\_ISVTX} & 01000 & sticky bit \itindex{sticky~bit}\\
     \hline
     \const{S\_IRWXU} & 00700 & l'utente ha tutti i permessi \\
     \const{S\_IRUSR} & 00400 & l'utente ha il permesso di lettura  \\
@@ -2256,7 +2279,7 @@ Ad esempio i permessi standard assegnati ai nuovi file (lettura e scrittura
 per il proprietario, sola lettura per il gruppo e gli altri) sono
 corrispondenti al valore ottale $0644$, un programma invece avrebbe anche il
 bit di esecuzione attivo, con un valore di $0755$, se si volesse attivare il
-bit \acr{suid} il valore da fornire sarebbe $4755$.
+bit \itindex{suid~bit} \acr{suid} il valore da fornire sarebbe $4755$.
 
 Il cambiamento dei permessi di un file eseguito attraverso queste funzioni ha
 comunque alcune limitazioni, previste per motivi di sicurezza. L'uso delle
@@ -2269,28 +2292,30 @@ limitazioni ulteriori. Per questo motivo, anche se si 
 non tutti i valori possibili di \param{mode} sono permessi o hanno effetto;
 in particolare accade che:
 \begin{enumerate}
-\item siccome solo l'amministratore può impostare lo \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 siccome solo l'amministratore può impostare lo \itindex{sticky~bit}
+  \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 \acr{sgid} ad un file appartenente a 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).
+  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
+  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{il filesystem \acr{ext2} supporta questa
-  caratteristica, che è mutuata da BSD.} è inoltre prevista una ulteriore
-misura di sicurezza, volta a scongiurare l'abuso dei 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
-effettui una scrittura. In questo modo anche se un utente malizioso scopre un
-file \acr{suid} su cui può scrivere, un'eventuale modifica comporterà la
-perdita di questo privilegio.
+Per alcuni filesystem\footnote{i filesystem più comuni (\textsl{ext2},
+  \textsl{ext3}, \textsl{reiser}) supportano questa caratteristica, che è
+  mutuata da BSD.} è inoltre prevista una 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
+  precisione un processo che non dispone della capability
+  \const{CAP\_FSETID}.} effettui una scrittura. In questo modo anche se un
+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}
@@ -2366,12 +2391,13 @@ sono:
   \errval{EACCES}, \errval{ELOOP}; \func{fchown} anche \errval{EBADF}.}
 \end{functions}
 
-In Linux soltanto l'amministratore può cambiare il proprietario di un file,
-seguendo la semantica di BSD che non consente agli utenti di assegnare i loro
-file ad altri (per evitare eventuali aggiramenti delle quote).
-L'amministratore può cambiare il gruppo di un file, il proprietario può
-cambiare il gruppo dei file che gli appartengono solo se il nuovo gruppo è il
-suo gruppo primario o uno dei gruppi a cui appartiene.
+In Linux soltanto l'amministratore (in sostanza un processo con la
+\itindex{capabilities} capability \const{CAP\_CHOWN}) può cambiare il
+proprietario di un file, seguendo la semantica di BSD che non consente agli
+utenti di assegnare i loro file ad altri (per evitare eventuali aggiramenti
+delle quote).  L'amministratore può cambiare il gruppo di un file, il
+proprietario può cambiare il gruppo dei file che gli appartengono solo se il
+nuovo gruppo è il suo gruppo primario o uno dei gruppi di cui fa parte.
 
 La funzione \func{chown} segue i link simbolici, per operare direttamente su
 un link simbolico si deve usare la funzione \func{lchown}.\footnote{fino alla
@@ -2384,16 +2410,11 @@ Un'altra estensione rispetto allo standard POSIX 
 valore per \param{owner} e \param{group} i valori restano immutati.
 
 Quando queste funzioni sono chiamate con successo da un processo senza i
-privilegi di root entrambi i bit \acr{suid} e \acr{sgid} vengono
-cancellati. Questo non avviene per il bit \acr{sgid} nel caso in cui esso
-sia usato (in assenza del corrispondente permesso di esecuzione) per indicare
-che per il file è attivo il \textit{mandatory locking}.
-
-%La struttura fondamentale che contiene i dati essenziali relativi ai file è il
-%cosiddetto \textit{inode}; questo conterrà informazioni come il
-%tipo di file (file di dispositivo, directory, file di dati, per un elenco
-%completo vedi \ntab), i permessi (vedi sez.~\ref{sec:file_perms}), le date (vedi
-%sez.~\ref{sec:file_times}).
+privilegi di root entrambi i bit \itindex{suid~bit} \acr{suid} e
+\itindex{sgid~bit} \acr{sgid} vengono cancellati. Questo non avviene per il
+bit \acr{sgid} nel caso in cui esso sia usato (in assenza del corrispondente
+permesso di esecuzione) per indicare che per il file è attivo il
+\textit{mandatory locking}.
 
 
 \subsection{Un quadro d'insieme sui permessi}
@@ -2444,14 +2465,16 @@ ha alcun effetto qualora il processo possieda i privilegi di amministratore.
   \label{tab:file_fileperm_bits}
 \end{table}
 
-Per compattezza, nella tabella si sono specificati i bit di \acr{suid},
-\acr{sgid} e \acr{sticky} con la notazione illustrata anche in
-fig.~\ref{fig:file_perm_bit}. 
+Per compattezza, nella tabella si sono specificati i bit di \itindex{suid~bit}
+\textit{suid}, \itindex{sgid~bit} \textit{sgid} e \textit{sticky}
+\itindex{sticky~bit} con la notazione illustrata anche in
+fig.~\ref{fig:file_perm_bit}.
 
 In tab.~\ref{tab:file_dirperm_bits} si sono invece riassunti gli effetti dei
 vari bit dei permessi per una directory; anche in questo caso si sono
-specificati i bit di \acr{suid}, \acr{sgid} e \acr{sticky} con la notazione
-compatta illustrata in fig.~\ref{fig:file_perm_bit}.
+specificati i bit di \itindex{suid~bit} \textit{suid}, \itindex{sgid~bit}
+\textit{sgid} e \textit{sticky} \itindex{sticky~bit} con la notazione compatta
+illustrata in fig.~\ref{fig:file_perm_bit}.
 
 \begin{table}[!htb]
   \centering
@@ -2500,25 +2523,27 @@ Bench
 programma ad una sezione limitata del filesystem, per cui ne parleremo in
 questa sezione.
 
-Come accennato in sez.~\ref{sec:proc_fork} ogni processo oltre ad una directory
-di lavoro, ha anche una directory \textsl{radice}\footnote{entrambe sono
-  contenute in due campi (rispettivamente \var{pwd} e \var{root}) di
+Come accennato in sez.~\ref{sec:proc_fork} ogni processo oltre ad una
+directory di lavoro, ha anche una directory \textsl{radice}\footnote{entrambe
+  sono contenute in due campi (rispettivamente \var{pwd} e \var{root}) di
   \struct{fs\_struct}; vedi fig.~\ref{fig:proc_task_struct}.} che, pur essendo
 di norma corrispondente alla radice dell'albero di file e directory come visto
 dal kernel (ed illustrato in sez.~\ref{sec:file_organization}), ha per il
 processo il significato specifico di directory rispetto alla quale vengono
-risolti i pathname assoluti.\footnote{cioè quando un processo chiede la
-  risoluzione di un pathname, il kernel usa sempre questa directory come punto
-  di partenza.} Il fatto che questo valore sia specificato per ogni processo
-apre allora la possibilità di modificare le modalità di risoluzione dei
-pathname assoluti da parte di un processo cambiando questa directory, così
-come si fa coi pathname relativi cambiando la directory di lavoro.
+risolti i \itindsub{pathname}{assoluto}\textit{pathname}
+assoluti.\footnote{cioè quando un processo chiede la risoluzione di un
+  \textit{pathname}, il kernel usa sempre questa directory come punto di
+  partenza.} Il fatto che questo valore sia specificato per ogni processo apre
+allora la possibilità di modificare le modalità di risoluzione dei
+\textit{pathname} assoluti da parte di un processo cambiando questa directory,
+così come si fa coi \itindsub{pathname}{relativo}\textit{pathname} relativi
+cambiando la directory di lavoro.
 
 Normalmente la directory radice di un processo coincide anche con la radice
 del filesystem usata dal kernel, e dato che il suo valore viene ereditato dal
-padre da ogni processo figlio, in generale i processi risolvono i pathname
-assoluti a partire sempre dalla stessa directory, che corrisponde alla
-\file{/} del sistema.
+padre da ogni processo figlio, in generale i processi risolvono i
+\itindsub{pathname}{assoluto}\textit{pathname} assoluti a partire sempre dalla
+stessa directory, che corrisponde alla \file{/} del sistema.
 
 In certe situazioni però, per motivi di sicurezza, è utile poter impedire che
 un processo possa accedere a tutto il filesystem; per far questo si può
@@ -2538,11 +2563,12 @@ prototipo 
   \errval{EROFS} e \errval{EIO}.}
 \end{prototype}
 \noindent in questo modo la directory radice del processo diventerà
-\param{path} (che ovviamente deve esistere) ed ogni pathname assoluto usato
-dalle funzioni chiamate nel processo sarà risolto a partire da essa, rendendo
-impossibile accedere alla parte di albero sovrastante.  Si ha così quella che
-viene chiamata una \textit{chroot jail}, in quanto il processo non può più
-accedere a file al di fuori della sezione di albero in cui è stato
+\param{path} (che ovviamente deve esistere) ed ogni
+\itindsub{pathname}{assoluto}\textit{pathname} assoluto usato dalle funzioni
+chiamate nel processo sarà risolto a partire da essa, rendendo impossibile
+accedere alla parte di albero sovrastante.  Si ha così quella che viene
+chiamata una \textit{chroot jail}, in quanto il processo non può più accedere
+a file al di fuori della sezione di albero in cui è stato
 \textsl{imprigionato}.
 
 Solo un processo con i privilegi di amministratore può usare questa funzione,
@@ -2554,10 +2580,10 @@ cambia la directory di lavoro, che potrebbe restare fuori dalla \textit{chroot
 Questo è il motivo per cui la funzione è efficace solo se dopo averla eseguita
 si cedono i privilegi di root. Infatti se per un qualche motivo il processo
 resta con la directory di lavoro fuori dalla \textit{chroot jail}, potrà
-comunque accedere a tutto il resto del filesystem usando pathname relativi, i
-quali, partendo dalla directory di lavoro che è fuori della \textit{chroot
-  jail}, potranno (con l'uso di \texttt{..}) risalire fino alla radice
-effettiva del filesystem.
+comunque accedere a tutto il resto del filesystem usando
+\itindsub{pathname}{relativo}\textit{pathname} relativi, i quali, partendo
+dalla directory di lavoro che è fuori della \textit{chroot jail}, potranno
+(con l'uso di \texttt{..}) risalire fino alla radice effettiva del filesystem.
 
 Ma se ad un processo restano i privilegi di amministratore esso potrà comunque
 portare la sua directory di lavoro fuori dalla \textit{chroot jail} in cui si