Trattazione unont 2 e correzione varie indicizzazioni e
[gapil.git] / filedir.tex
index ac07597e75951f2433f9dab94a48da0fc4f68c5c..2fbda9fa35ea0bdd0c9987a51d832f8c025e2e94 100644 (file)
@@ -100,6 +100,7 @@ relativi campi con i dati specifici di quel filesystem, ed in particolare si
 dovrà creare anche la relativa versione della funzione \code{mount}.
 
 \itindbeg{pathname}
+\itindbeg{pathname!resolution}
 
 Come illustrato in fig.~\ref{fig:kstruct_file_system_type} questa funzione
 restituisce una \textit{dentry}, abbreviazione che sta per \textit{directory
@@ -145,6 +146,7 @@ filesystem, e come vedremo questo farà sì che venga eseguita una
 filesystem.
 
 \itindend{pathname}
+\itindend{pathname!resolution}
 
 % Un secondo effetto della chiamata funzione \texttt{mount} di
 % \kstruct{file\_system\_type} è quello di allocare una struttura
@@ -608,9 +610,10 @@ indicizzazione tramite hash al posto delle \textit{linked list} che abbiamo
 illustrato, ottenendo un forte guadagno di prestazioni in caso di directory
 contenenti un gran numero di file.
 
-% TODO portare a ext3, ext4 e btrfs ed illustrare le problematiche che si
-% possono incontrare (in particolare quelle relative alla perdita di contenuti
-% in caso di crash del sistema)
+% TODO (bassa priorità) portare a ext3, ext4 e btrfs ed illustrare le
+% problematiche che si possono incontrare (in particolare quelle relative alla
+% perdita di contenuti in caso di crash del sistema)
+% TODO (media priorità) trattare btrfs quando sarà usato come stabile
 
 
 \subsection{La gestione dell'uso dei filesystem}
@@ -635,10 +638,10 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei
-    componenti del \itindex{pathname} \textit{pathname}, o si è cercato di
-    montare un filesystem disponibile in sola lettura senza aver specificato
-    \const{MS\_RDONLY} o il device \param{source} è su un filesystem montato
-    con l'opzione \const{MS\_NODEV}.
+    componenti del \textit{pathname}, o si è cercato di montare un filesystem
+    disponibile in sola lettura senza aver specificato \const{MS\_RDONLY} o il
+    device \param{source} è su un filesystem montato con l'opzione
+    \const{MS\_NODEV}.
   \item[\errcode{EBUSY}] \param{source} è già montato, o non può essere
     rimontato in sola lettura perché ci sono ancora file aperti in scrittura,
     o non può essere montato su \param{target} perché la directory è ancora in
@@ -651,7 +654,7 @@ il cui prototipo è:\footnote{la funzione è una versione specifica di Linux che
     \textit{mount point} o è la radice.
   \item[\errcode{ELOOP}] si è cercato di spostare un \itindex{mount~point}
     \textit{mount point} su una sottodirectory di \param{source} o si sono
-    incontrati troppi link simolici nella risoluzione di un nome.
+    incontrati troppi link simbolici nella risoluzione di un nome.
   \item[\errcode{EMFILE}] in caso di filesystem virtuale, la tabella dei
     dispositivi fittizi (chiamati \textit{dummy} nella documentazione inglese)
     è piena.
@@ -672,8 +675,7 @@ La funzione monta sulla directory indicata da \param{target}, detta
 di dispositivo indicato da \param{source}. In entrambi i casi, come daremo per
 assunto da qui in avanti tutte le volte che si parla di directory o file nel
 passaggio di un argomento di una funzione, si intende che questi devono essere
-indicati con la stringa contenente il loro \itindex{pathname}
-\textit{pathname}.
+indicati con la stringa contenente il loro \textit{pathname}.
 
 Normalmente un filesystem è contenuto su un disco o una partizione, ma come
 illustrato in sez.~\ref{sec:file_vfs_work} la struttura del
@@ -707,7 +709,7 @@ Dopo l'esecuzione della funzione il contenuto del filesystem viene resto
 disponibile nella directory specificata come \itindex{mount~point}
 \textit{mount point}, il precedente contenuto di detta directory viene
 mascherato dal contenuto della directory radice del filesystem montato. Fino
-ai kernel della serie 2.2.x non era possibile montare un filesytem se un
+ai kernel della serie 2.2.x non era possibile montare un filesystem se un
 \textit{mount point} era già in uso. 
 
 A partire dal kernel 2.4.x inoltre è divenuto possibile sia spostare
@@ -751,9 +753,9 @@ identificati dalle costanti riportate nell'elenco seguente:
   effettuato il \textit{bind mount}. Gli argomenti \param{filesystemtype}
   e \param{data} vengono ignorati.
 
-  In sostanza quello che avviene è che in corrispondenza del \index{pathname}
-  \textit{pathname} indicato da \param{target} viene montato l'\textit{inode}
-  di \param{source}, così che la porzione di albero dei file presente sotto
+  In sostanza quello che avviene è che in corrispondenza del \textit{pathname}
+  indicato da \param{target} viene montato l'\textit{inode} di \param{source},
+  così che la porzione di albero dei file presente sotto
   \param{source} diventi visibile allo stesso modo sotto
   \param{target}. Trattandosi esattamente dei dati dello stesso filesystem,
   ogni modifica fatta in uno qualunque dei due rami di albero sarà visibile
@@ -762,7 +764,7 @@ identificati dalle costanti riportate nell'elenco seguente:
 
   Dal punto di vista del \itindex{Virtual~File~System} VFS l'operazione è
   analoga al montaggio di un filesystem proprio nel fatto che anche in questo
-  caso si inserisce in corripondenza della \textit{dentry} di \texttt{target}
+  caso si inserisce in corrispondenza della \textit{dentry} di \texttt{target}
   un diverso \textit{inode}, che stavolta, invece di essere quello della
   radice del filesystem indicato da un file di dispositivo, è quello di una
   directory già montata.
@@ -829,10 +831,11 @@ identificati dalle costanti riportate nell'elenco seguente:
   vengono ignorati.
 
   Lo spostamento avviene atomicamente, ed il ramo di albero presente
-  sotto \param{source} sarà immediatamante visibile sotto \param{target}. Non
+  sotto \param{source} sarà immediatamente visibile sotto \param{target}. Non
   esiste cioè nessun momento in cui il filesystem non risulti montato in una o
   nell'altra directory e pertanto è garantito che la risoluzione di
-  \textit{pathname} relativi all'interno del filesystem non possa fallire.
+  \itindsub{pathname}{relativo} \textit{pathname} relativi all'interno del
+  filesystem non possa fallire.
 
 \item[\const{MS\_NOATIME}] Viene disabilitato sul filesystem l'aggiornamento
   degli \textit{access time} (vedi sez.~\ref{sec:file_file_times}) per
@@ -935,7 +938,7 @@ identificati dalle costanti riportate nell'elenco seguente:
 
 \item[\const{MS\_RELATIME}] Indica di effettuare l'aggiornamento degli
   \textit{access time} sul filesystem soltanto quando questo risulti
-  antecendente il valore corrente del \textit{modification time} o del
+  antecedente il valore corrente del \textit{modification time} o del
   \textit{change time} (per i tempi dei file si veda
   sez.~\ref{sec:file_file_times}). L'opzione è disponibile a partire dal
   kernel 2.6.20, mentre dal 2.6.30 questo è diventato il comportamento di
@@ -1066,7 +1069,7 @@ identificati dalle costanti riportate nell'elenco seguente:
 
 
 Una volta che non si voglia più utilizzare un certo filesystem è possibile
-\textsl{smontarlo} usando la funzione \funcd{umount}, il cui prototipo è:
+``\textsl{smontarlo}'' usando la funzione \funcd{umount}, il cui prototipo è:
 
 \begin{funcproto}{ 
 \fhead{sys/mount.h}
@@ -1076,16 +1079,18 @@ Una volta che non si voglia più utilizzare un certo filesystem è possibile
 {La funzione ritorna  $0$ in caso di successo e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-  \item[\errcode{EBUSY}] \param{target} è la \index{directory~di~lavoro}
-    directory di lavoro di qualche processo, o contiene dei file aperti, o un
-    altro mount point.
+  \item[\errcode{EBUSY}] il filesystem è occupato.
   \item[\errcode{EINVAL}] \param{target} non è un \textit{mount point}.
-  \item[\errcode{EPERM}] il processo non ha i privilegi di amministratore.
+  \item[\errcode{EPERM}] il processo non ha i privilegi di
+    amministratore.\footnotemark 
   \end{errlist}
   ed inoltre \errval{EFAULT}, \errval{ELOOP}, \errval{ENAMETOOLONG},
   \errval{ENOENT}, \errval{ENOMEM} nel loro significato generico.  }
 \end{funcproto}
 
+\footnotetext{più precisamente la \itindex{capabilities} capacità
+  \texttt{CAP\_SYS\_ADMIN}.}
+
 La funzione prende il nome della directory su cui il filesystem è montato e
 non il file o il dispositivo che è stato montato,\footnote{questo è vero a
   partire dal kernel 2.3.99-pre7, prima esistevano due chiamate separate e la
@@ -1094,10 +1099,10 @@ quanto a partire dai kernel della serie 2.4.x è possibile montare lo stesso
 dispositivo in più punti. Nel caso più di un filesystem sia stato montato
 sullo stesso \itindex{mount~point} \textit{mount point} viene smontato quello
 che è stato montato per ultimo. Si tenga presente che la funzione fallisce se
-il filesystem è \textsl{occupato}, cioè quando se ci sono ancora dei file
+il filesystem è ``\textsl{occupato}'', cioè quando ci sono ancora dei file
 aperti sul filesystem, se questo contiene la \index{directory~di~lavoro}
-directory di lavoro corrente di un qualunque processo o il
-\itindex{mount~point} \textit{mount point} di un altro filesystem.
+directory di lavoro di un qualunque processo o il \itindex{mount~point}
+\textit{mount point} di un altro filesystem.
 
 Linux provvede inoltre una seconda funzione, \funcd{umount2}, che consente un
 maggior controllo delle operazioni, come forzare lo smontaggio di un
@@ -1111,20 +1116,27 @@ filesystem anche quando questo risulti occupato; il suo prototipo è:
 {La funzione ritorna  $0$ in caso di successo e $-1$ per un errore,
   nel qual caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-     \item[\errcode{EAGAIN}] 
-     \item[\errcode{EINVAL}]
+     \item[\errcode{BUSY}] \param{target} è la \index{directory~di~lavoro}
+       directory di lavoro di qualche processo, o contiene dei file aperti, o un
+       altro mount point.
+     \item[\errcode{EAGAIN}] si è chiamata la funzione con \const{MNT\_EXPIRE}
+       ed il filesystem non era occupato.
+     \item[\errcode{EINVAL}] \param{target} non è un \itindex{mount~point}
+       \textit{mount point} o si è usato \const{MNT\_EXPIRE} con
+       \const{MNT\_FORCE} o \const{MNT\_DETACH} o si è specificato un flag non
+       esistente.
   \end{errlist}
-  e gli altri valori visti per \func{umount} con lo stesso signigicato.
-}
+  e tutti gli altri valori visti per \func{umount} con lo stesso significato.}
 \end{funcproto}
 
-Il valore di \param{flags} è una maschera binaria, che deve essere specificato
-con un OR aritmetico dei valori illustrate in tab.~\ref{tab:umount2_flags}.
-Specificando \const{MNT\_FORCE} la funzione cercherà di liberare il filesystem
-anche se è occupato per via di una delle condizioni descritte in precedenza. A
-seconda del tipo di filesystem alcune (o tutte) possono essere superate,
-evitando l'errore di \errcode{EBUSY}.  In tutti i casi prima dello smontaggio
-viene eseguita una sincronizzazione dei dati.
+Il valore di \param{flags} è una maschera binaria dei flag che controllano le
+modalità di smontaggio, che deve essere specificato con un OR aritmetico delle
+costanti illustrate in tab.~\ref{tab:umount2_flags}.  Specificando
+\const{MNT\_FORCE} la funzione cercherà di liberare il filesystem anche se è
+occupato per via di una delle condizioni descritte in precedenza. A seconda
+del tipo di filesystem alcune (o tutte) possono essere superate, evitando
+l'errore di \errcode{EBUSY}. In tutti i casi prima dello smontaggio viene
+eseguita una sincronizzazione dei dati.
 
 \begin{table}[!htb]
   \centering
@@ -1134,10 +1146,21 @@ viene eseguita una sincronizzazione dei dati.
     \textbf{Costante} & \textbf{Descrizione}\\
     \hline
     \hline
-    \const{MNT\_FORCE}  & (dal kernel 2.2).\\
-    \const{MNT\_DETACH} & (dal kernel 2.4.11 e dalla \acr{glibc} 2.11).\\
-    \const{MNT\_EXPIRE} & (dal kernel 2.6.8 e dalla \acr{glibc} 2.11).\\
-    \const{UMOUNT\_NOFOLLOW}& (dal kernel 2.6.34).\\
+    \const{MNT\_FORCE}  & forza lo smontaggio del filesystem anche se questo è
+                          occupato (presente dai kernel della serie 2.2).\\
+    \const{MNT\_DETACH} & esegue uno smontaggio ``\textsl{pigro}'', in cui si
+                          blocca l'accesso ma si aspetta che il filesystem si
+                          liberi (presente dal kernel 2.4.11 e dalla
+                          \acr{glibc} 2.11).\\ 
+    \const{MNT\_EXPIRE} & se non occupato marca un \itindex{mount~point} 
+                          \textit{mount point} come ``\textsl{in scadenza}'' in
+                          modo che ad una successiva chiamata senza utilizzo
+                          del filesystem questo venga smontato (presente dal
+                          kernel 2.6.8 e dalla \acr{glibc} 2.11).\\ 
+    \const{UMOUNT\_NOFOLLOW}& non dereferenzia \param{target} se questo è un
+                          link simbolico (vedi sez.~\ref{sec:file_symlink})
+                          evitando problemi di sicurezza (presente dal kernel
+                          2.6.34).\\ 
     \hline
   \end{tabular}
   \caption{Costanti che identificano i bit dell'argomento \param{flags}
@@ -1145,7 +1168,26 @@ viene eseguita una sincronizzazione dei dati.
   \label{tab:umount2_flags}
 \end{table}
 
-
+Con l'opzione \const{MNT\_DETACH} si richiede invece uno smontaggio
+``\textsl{pigro}'' (o \textit{lazy umount}) in cui il filesystem diventa
+inaccessibile per i nuovi processi subito dopo la chiamata della funzione, ma
+resta accessibile per quelli che lo hanno ancora in uso e non viene smontato
+fintanto che resta occupato.
+
+Con \const{MNT\_EXPIRE}, che non può essere specificato insieme agli altri
+due, si marca il \itindex{mount~point} \textit{mount point} di un filesystem
+non occupato come ``\textsl{in scadenza}'', in tal caso \func{umount2} ritorna
+con un errore di \errcode{EAGAIN}, mentre in caso di filesystem occupato si
+sarebbe ricevuto \errcode{BUSY}.  Una volta marcato, se nel frattempo non
+viene fatto nessun uso del filesystem, ad una successiva chiamata con
+\const{MNT\_EXPIRE} questo verrà smontato. Questo flag consente di realizzare
+un meccanismo che smonti automaticamente i filesystem che restano inutilizzato
+per un certo periodo di tempo.
+
+% Infine il flag \const{UMOUNT\_NOFOLLOW} impedisce l'uso di un link simbolico
+% per \param{target} evitando così che si possano passare ai programmi che
+% effettuano lo smontaggio dei filesystem per i quali è previsto la possibilità
+% di gestione da parte degli utenti con uno programma \acr{sgid} 
 
 Altre due funzioni specifiche di Linux,\footnote{esse si trovano anche su BSD,
   ma con una struttura diversa.} utili per ottenere in maniera diretta
@@ -1170,7 +1212,7 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono
 \end{funcproto}
 
 Queste funzioni permettono di ottenere una serie di informazioni generali
-riguardo al filesystem su cui si trova il file specificato; queste vengono
+riguardo al filesystem su cui si trova il file specificato con un ; queste vengono
 restituite all'indirizzo \param{buf} di una struttura \struct{statfs} definita
 come in fig.~\ref{fig:sys_statfs}, ed i campi che sono indefiniti per il
 filesystem in esame sono impostati a zero.  I valori del campo \var{f\_type}
@@ -1203,10 +1245,8 @@ semplice invocare direttamente il programma \cmd{mount}, per cui ne
 tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
 \cite{glibc} per la documentazione completa.
 
-% TODO scrivere relativamente alle varie funzioni (getfsent e getmntent &C)
-% TODO documentare swapon e swapoff (man 2 ...)
-
-
+% TODO (bassa priorità) scrivere delle funzioni (getfsent e getmntent &C)
+% TODO (bassa priorità) documentare ? swapon e swapoff (man 2 ...) 
 
 \section{La gestione di file e directory}
 \label{sec:file_dir}
@@ -1281,25 +1321,25 @@ diretto, o \textit{hard link}.  Il prototipo della funzione è il seguente:
 \end{funcproto}
 
 
-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.
+La funzione crea sul \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 \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). In realtà la funzione ha un
-ulteriore requisito, e cioè che non solo che i due file siano sullo stesso
-filesystem, ma anche che si faccia riferimento ad essi sullo stesso
-\itindex{mount~point} \textit{mount point}.\footnote{si tenga presente infatti
-  (vedi sez.~\ref{sec:sys_file_config}) che a partire dal kernel 2.4 uno
-  stesso filesystem può essere montato più volte su directory diverse.}
+collegamento diretto è possibile solo se entrambi i \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). In realtà la funzione ha un ulteriore requisito, e
+cioè che non solo che i due file siano sullo stesso filesystem, ma anche che
+si faccia riferimento ad essi sullo stesso \itindex{mount~point} \textit{mount
+  point}.\footnote{si tenga presente infatti (vedi
+  sez.~\ref{sec:sys_file_config}) che a partire dal kernel 2.4 uno stesso
+  filesystem può essere montato più volte su directory diverse.}
 
 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
@@ -1443,7 +1483,7 @@ a \func{rmdir}; il suo prototipo è:
 \fdesc{Cancella un nome dal filesystem.} 
 }
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
-  caso \var{errno} assumerà uno dei valori relativi alla chimata utilizzata,
+  caso \var{errno} assumerà uno dei valori relativi alla chiamata utilizzata,
   pertanto si può fare riferimento a quanto illustrato nelle descrizioni di
   \func{unlink} e \func{rmdir}.}
 \end{funcproto}
@@ -1483,8 +1523,8 @@ 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
+  \item[\errcode{ENOTDIR}] uno dei componenti dei \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
@@ -1577,13 +1617,12 @@ esso specificato.  La funzione che permette di creare un nuovo link simbolico
   \errval{ENOSPC} e \errval{EIO} nel loro significato generico.}
 \end{funcproto}
 
-La funzione crea un nuovo link simbolico con \itindex{pathname}
-\textit{pathname} \param{newpath} che fa riferimento ad \param{oldpath}.  Si
-tenga presente che la funzione non effettua nessun controllo sull'esistenza di
-un file di nome \param{oldpath}, ma si limita ad inserire il
-\itindex{pathname} \textit{pathname} nel link simbolico. Pertanto un link
-simbolico può anche riferirsi ad un file che non esiste: in questo caso si ha
-quello che viene chiamato un \textit{dangling link}, letteralmente un
+La funzione crea un nuovo link simbolico con \textit{pathname} \param{newpath}
+che fa riferimento ad \param{oldpath}.  Si tenga presente che la funzione non
+effettua nessun controllo sull'esistenza di un file di nome \param{oldpath},
+ma si limita ad inserire il \textit{pathname} nel link simbolico. Pertanto un
+link simbolico può anche riferirsi ad un file che non esiste: in questo caso
+si ha quello che viene chiamato un \textit{dangling link}, letteralmente un
 \textsl{link ciondolante}.
 
 Come accennato i link simbolici sono risolti automaticamente dal kernel
@@ -1689,8 +1728,8 @@ 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
-limitato di link simbolici, il cui valore limite è specificato dalla costante
+un \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}.
 
@@ -1756,8 +1795,8 @@ una opportuna system call.\footnote{questo è quello che permette anche,
 La funzione crea una nuova directory vuota, che contiene cioè solo le due voci
 standard presenti in ogni directory (cioè ``\file{.}'' e ``\file{..}''), con
 il nome indicato dall'argomento \param{dirname}. Il nome può essere indicato
-sia come \itindex{pathname} \textit{pathname} assoluto che come
-\itindex{pathname} \textit{pathname} relativo.
+sia come \itindsub{pathname}{assoluto} \textit{pathname} assoluto che come
+\itindsub{pathname}{relativo} \textit{pathname} relativo.
 
 I permessi di accesso (vedi sez.~\ref{sec:file_access_control}) con cui la
 directory viene creata sono specificati dall'argomento \param{mode}, i cui
@@ -1794,8 +1833,8 @@ La funzione che permette la cancellazione di una directory è invece
 
 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 \textit{pathname} assoluto
+o relativo.
 
 La modalità con cui avviene la cancellazione è analoga a quella di
 \func{unlink}: fintanto che il numero di link \itindex{inode}
@@ -2440,8 +2479,8 @@ chiusura (\texttt{\small 32}) dello stream\footnote{nel nostro caso, uscendo
 \subsection{La directory di lavoro}
 \label{sec:file_work_dir}
 
-\itindbeg{pathname}
 \index{directory~di~lavoro|(} 
+
 Come accennato in sez.~\ref{sec:proc_fork} a ciascun processo è associata una
 directory nel filesystem,\footnote{questa viene mantenuta all'interno dei dati
   della sua \struct{task\_struct} (vedi fig.~\ref{fig:proc_task_struct}), più
@@ -2561,7 +2600,6 @@ 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}
 \index{directory~di~lavoro|)} 
 
 
@@ -2792,13 +2830,13 @@ funzioni \funcd{stat}, \funcd{fstat} e \funcd{lstat}, i cui prototipi sono:
     \errval{EACCES}, \errval{ENOMEM}, \errval{ENAMETOOLONG}.}
 \end{functions}
 
-La funzione \func{stat} legge le informazioni del file il cui pathname è
-specificato dalla stringa puntata da \param{file\_name} e le inserisce nel
-buffer puntato dall'argomento \param{buf}; la funzione \func{lstat} è identica
-a \func{stat} eccetto che se \param{file\_name} è un link simbolico vengono
-lette le informazioni relative ad esso e non al file a cui fa
-riferimento. Infine \func{fstat} esegue la stessa operazione su un file già
-aperto, specificato tramite il suo file descriptor \param{filedes}.
+La funzione \func{stat} legge le informazioni del file il cui
+\textit{pathname} è specificato dalla stringa puntata da \param{file\_name} e
+le inserisce nel buffer puntato dall'argomento \param{buf}; la funzione
+\func{lstat} è identica a \func{stat} eccetto che se \param{file\_name} è un
+link simbolico vengono lette le informazioni relative ad esso e non al file a
+cui fa riferimento. Infine \func{fstat} esegue la stessa operazione su un file
+già aperto, specificato tramite il suo file descriptor \param{filedes}.
 
 La struttura \struct{stat} usata da queste funzioni è definita nell'header
 \headfile{sys/stat.h} e in generale dipende dall'implementazione; la versione
@@ -2927,8 +2965,8 @@ poi si effettua il confronto con la combinazione di tipi scelta.
 
 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.
+simbolico la dimensione è quella del \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
@@ -2980,8 +3018,7 @@ 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 \textit{pathname}.
   \item[\errcode{ETXTBSY}] il file è un programma in esecuzione.
   \end{errlist}
   ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
@@ -2990,9 +3027,9 @@ dimensione si possono usare le due funzioni \funcd{truncate} e
 
 Entrambe le funzioni fan sì che la dimensione del file sia troncata ad un
 valore massimo specificato da \param{length}, e si distinguono solo per il
-fatto che il file viene indicato con il pathname \param{file\_name} per
-\func{truncate} e con il file descriptor \param{fd} per \funcd{ftruncate}; se
-il file è più lungo della lunghezza specificata i dati in eccesso saranno
+fatto che il file viene indicato con il \textit{pathname} \param{file\_name}
+per \func{truncate} e con il file descriptor \param{fd} per \funcd{ftruncate};
+se il file è più lungo della lunghezza specificata i dati in eccesso saranno
 perduti.
 
 Il comportamento in caso di lunghezza inferiore non è specificato e dipende
@@ -3380,12 +3417,12 @@ sostanzialmente una estensione di \func{futimes} che consente di specificare i
 tempi con precisione maggiore, la seconda supporta invece, rispetto ad
 \func{utimes}, una sintassi più complessa che, come vedremo in
 sez.~\ref{sec:file_openat} consente una indicazione sicura dei
-\textit{pathname relativi} specificando la directory da usare come riferimento
-in \param{dirfd} e la possibilità di usare \param{flags} per indicare alla
-funzione di dereferenziare o meno i link simbolici; si rimanda pertanto la
-spiegazione del significato degli argomenti aggiuntivi alla trattazione
-generica delle varie funzioni che usano la stessa sintassi, effettuata in
-sez.~\ref{sec:file_openat}.
+\itindsub{pathname}{relativo} \textit{pathname relativi} specificando la
+directory da usare come riferimento in \param{dirfd} e la possibilità di
+usare \param{flags} per indicare alla funzione di dereferenziare o meno i link
+simbolici; si rimanda pertanto la spiegazione del significato degli argomenti
+aggiuntivi alla trattazione generica delle varie funzioni che usano la stessa
+sintassi, effettuata in sez.~\ref{sec:file_openat}.
 
 
 \section{Il controllo di accesso ai file}
@@ -3506,15 +3543,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
-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).
+\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 \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
@@ -4300,7 +4337,7 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   sicurezza che si sta utilizzando al momento (ciascuno avrà le sue). Se non è
   stato caricato nessun modulo di sicurezza l'accesso in lettura sarà
   consentito a tutti i processi, mentre quello in scrittura solo ai processi
-  con privilegi amministrativi dotati della \index{capabilities}
+  con privilegi amministrativi dotati della \itindex{capabilities}
   \textit{capability} \const{CAP\_SYS\_ADMIN}.
 
 \item[\texttt{system}] Anche l'accesso agli \textit{extended system
@@ -4310,13 +4347,13 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   lettura ai processi che hanno la capacità di eseguire una ricerca sul file
   (cioè hanno il permesso di lettura sulla directory che contiene il file) ed
   in scrittura al proprietario del file o ai processi dotati della
-  \textit{capability} \index{capabilities} \const{CAP\_FOWNER}.\footnote{vale
-    a dire una politica di accesso analoga a quella impiegata per gli ordinari
-    permessi dei file.}
+  \textit{capability} \itindex{capabilities}
+  \const{CAP\_FOWNER}.\footnote{vale a dire una politica di accesso analoga a
+    quella impiegata per gli ordinari permessi dei file.}
 
 \item[\texttt{trusted}] L'accesso ai \textit{trusted extended attributes}, sia
   per la lettura che per la scrittura, è consentito soltanto ai processi con
-  privilegi amministrativi dotati della \index{capabilities}
+  privilegi amministrativi dotati della \itindex{capabilities}
   \textit{capability} \const{CAP\_SYS\_ADMIN}. In questo modo si possono
   utilizzare questi attributi per realizzare in user space dei meccanismi di
   controllo che accedono ad informazioni non disponibili ai processi ordinari.
@@ -4358,7 +4395,7 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   per evitare eventuali abusi, se una directory ha lo \itindex{sticky~bit}
   \textit{sticky bit} attivo sarà consentito scrivere i suoi \textit{extended
     user attributes} soltanto se si è proprietari della stessa, o si hanno i
-  privilegi amministrativi della capability \index{capabilities}
+  privilegi amministrativi della capability \itindex{capabilities}
   \const{CAP\_FOWNER}.
 \end{basedescript}
 
@@ -4404,12 +4441,12 @@ simbolico e ad un file descriptor; i rispettivi prototipi sono:
 \end{functions}
 
 Le funzioni \func{getxattr} e \func{lgetxattr} prendono come primo argomento
-un pathname che indica il file di cui si vuole richiedere un attributo, la
-sola differenza è che la seconda, se il pathname indica un link simbolico,
-restituisce gli attributi di quest'ultimo e non quelli del file a cui esso fa
-riferimento. La funzione \func{fgetxattr} prende invece come primo argomento
-un numero di file descriptor, e richiede gli attributi del file ad esso
-associato.
+un \textit{pathname} che indica il file di cui si vuole richiedere un
+attributo, la sola differenza è che la seconda, se il \textit{pathname} indica
+un link simbolico, restituisce gli attributi di quest'ultimo e non quelli del
+file a cui esso fa riferimento. La funzione \func{fgetxattr} prende invece
+come primo argomento un numero di file descriptor, e richiede gli attributi
+del file ad esso associato.
 
 Tutte e tre le funzioni richiedono di specificare nell'argomento \param{name}
 il nome dell'attributo di cui si vuole ottenere il valore. Il nome deve essere
@@ -4632,7 +4669,7 @@ può impostare una ACL aggiuntiva, detta \textit{default ACL}, che serve ad
 indicare quale dovrà essere la ACL assegnata di default nella creazione di un
 file all'interno della directory stessa. Come avviene per i permessi le ACL
 possono essere impostate solo del proprietario del file, o da un processo con
-la capability \index{capabilities} \const{CAP\_FOWNER}.
+la capability \itindex{capabilities} \const{CAP\_FOWNER}.
 
 \begin{table}[htb]
   \centering
@@ -4940,12 +4977,13 @@ sono:
 
 Le due funzioni ritornano, con un oggetto di tipo \type{acl\_t}, il valore
 della ACL correntemente associata ad un file, che può essere identificato
-tramite un file descriptor usando \func{acl\_get\_fd} o con un pathname usando
-\func{acl\_get\_file}. Nel caso di quest'ultima funzione, che può richiedere
-anche la ACL relativa ad una directory, il secondo argomento \param{type}
-consente di specificare se si vuole ottenere la ACL di default o quella di
-accesso. Questo argomento deve essere di tipo \type{acl\_type\_t} e può
-assumere solo i due valori riportati in tab.~\ref{tab:acl_type}.
+tramite un file descriptor usando \func{acl\_get\_fd} o con un
+\textit{pathname} usando \func{acl\_get\_file}. Nel caso di quest'ultima
+funzione, che può richiedere anche la ACL relativa ad una directory, il
+secondo argomento \param{type} consente di specificare se si vuole ottenere la
+ACL di default o quella di accesso. Questo argomento deve essere di tipo
+\type{acl\_type\_t} e può assumere solo i due valori riportati in
+tab.~\ref{tab:acl_type}.
 
 \begin{table}[htb]
   \centering
@@ -5272,19 +5310,20 @@ directory, ed il cui prototipo è:
 \end{functions}
 
 La funzione consente di assegnare la ACL contenuta in \param{acl} al file o
-alla directory indicate dal pathname \param{path}, mentre con \param{type} si
-indica il tipo di ACL utilizzando le costanti di tab.~\ref{tab:acl_type}, ma
-si tenga presente che le ACL di default possono essere solo impostate
-qualora \param{path} indichi una directory. Inoltre perché la funzione abbia
-successo la ACL dovrà essere valida, e contenere tutti le voci necessarie,
-unica eccezione è quella in cui si specifica una ACL vuota per cancellare la
-ACL di default associata a \func{path}.\footnote{questo però è una estensione
-  della implementazione delle ACL di Linux, la bozza di standard POSIX.1e
-  prevedeva l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che
-  prende come unico argomento il pathname della directory di cui si vuole
-  cancellare l'ACL di default, per i dettagli si ricorra alla pagina di
-  manuale.}  La seconda funzione che consente di impostare una ACL è
-\funcd{acl\_set\_fd}, ed il suo prototipo è:
+alla directory indicate dal \textit{pathname} \param{path}, mentre
+con \param{type} si indica il tipo di ACL utilizzando le costanti di
+tab.~\ref{tab:acl_type}, ma si tenga presente che le ACL di default possono
+essere solo impostate qualora \param{path} indichi una directory. Inoltre
+perché la funzione abbia successo la ACL dovrà essere valida, e contenere
+tutti le voci necessarie, unica eccezione è quella in cui si specifica una ACL
+vuota per cancellare la ACL di default associata a
+\func{path}.\footnote{questo però è una estensione della implementazione delle
+  ACL di Linux, la bozza di standard POSIX.1e prevedeva l'uso della apposita
+  funzione \funcd{acl\_delete\_def\_file}, che prende come unico argomento il
+  \textit{pathname} della directory di cui si vuole cancellare l'ACL di
+  default, per i dettagli si ricorra alla pagina di manuale.}  La seconda
+funzione che consente di impostare una ACL è \funcd{acl\_set\_fd}, ed il suo
+prototipo è:
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/acl.h}
@@ -5464,11 +5503,12 @@ caso \param{type} deve essere rispettivamente \const{USRQUOTA} o
     \hline
     \const{Q\_QUOTAON}  & Attiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, si deve passare
-                          in \param{addr} il pathname al file che mantiene le
-                          quote, che deve esistere, e \param{id} deve indicare
-                          la versione del formato con uno dei valori di
-                          tab.~\ref{tab:quotactl_id_format}; l'operazione
-                          richiede i privilegi di amministratore.\\
+                          in \param{addr} il \textit{pathname} al file che
+                          mantiene le quote, che deve esistere, e \param{id}
+                          deve indicare la versione del formato con uno dei
+                          valori di tab.~\ref{tab:quotactl_id_format};
+                          l'operazione richiede i privilegi di
+                          amministratore.\\
     \const{Q\_QUOTAOFF} & Disattiva l'applicazione delle quote disco per il
                           filesystem indicato da \param{dev}, \param{id}
                           e \param{addr} vengono ignorati; l'operazione
@@ -6837,7 +6877,7 @@ con \func{cap\_free}.
 Alle due funzioni citate se ne aggiungono altre due che consentono di
 convertire i valori delle costanti di tab.~\ref{tab:proc_capabilities} nelle
 stringhe usate nelle rispettive rappresentazioni e viceversa. Le due funzioni,
-\func{cap\_to\_name} e \func{cap\_from\_name}, sono estensioni specifiche di
+\funcd{cap\_to\_name} e \funcd{cap\_from\_name}, sono estensioni specifiche di
 Linux ed i rispettivi prototipi sono:
 \begin{functions}
   \headdecl{sys/capability.h}
@@ -7018,8 +7058,8 @@ specifico di directory rispetto alla quale vengono risolti i
 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 \index{directory~di~lavoro} directory
-di lavoro.
+\itindsub{pathname}{relativo}\textit{pathname} relativi cambiando la
+\index{directory~di~lavoro} 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
@@ -7152,8 +7192,8 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  Python Truelite Srl quotamodule Repository who nell' dall' KEEP
 % LocalWords:  SECURE KEEPCAPS prctl FIXUP NOROOT LOCKED dell'IPC dell'I IOPRIO
 % LocalWords:  CAPBSET CLASS IDLE dcookie overflow DIFFERS Virtual everything
-% LocalWords:  dentry register resolution cache dcache operation llseek poll
-% LocalWords:  multiplexing fsync fasync seek block superblock gapil tex img
+% LocalWords:  dentry register resolution cache dcache operation llseek poll ln
+% LocalWords:  multiplexing fsync fasync seek block superblock gapil tex img du
 % LocalWords:  second linked journaled source filesystemtype unsigned device
 % LocalWords:  mountflags NODEV ENXIO dummy devfs magic MGC RDONLY NOSUID MOVE
 % LocalWords:  NOEXEC SYNCHRONOUS REMOUNT MANDLOCK NODIRATIME umount MNT statfs
@@ -7163,3 +7203,6 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  bind DIRSYNC lsattr Hierarchy FHS SHARED UNBINDABLE shared REC
+% LocalWords:  subtree SILENT log unbindable BUSY EAGAIN EXPIRE DETACH NOFOLLOW
+% LocalWords:  lazy