Altri indici, aggiornamenti date di copyright e dizionari locali.
[gapil.git] / filedir.tex
index e49223502d1583ee9b8709a7e4fc399dc2cc5bb6..84e702263b54b3da646cf8b8c8d8a69886f443e4 100644 (file)
@@ -1,6 +1,6 @@
 %% filedir.tex
 %%
-%% Copyright (C) 2000-2005 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2006 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -164,10 +164,10 @@ Per cancellare una voce in una directory 
 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
@@ -183,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
@@ -307,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.
@@ -485,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}
@@ -540,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
@@ -614,11 +615,11 @@ permessi sono comunque modificati nella maniera usuale dal valore di
 \var{umask} (si veda sez.~\ref{sec:file_umask}).
 
 Per il tipo di file può essere specificato solo uno fra: \const{S\_IFREG} per
-un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un device a
-blocchi, \const{S\_IFCHR} per un device a caratteri e \const{S\_IFIFO} per una
-fifo. Un valore diverso comporterà l'errore \errcode{EINVAL}. Qualora si sia
-specificato in \param{mode} un file di dispositivo, il valore di \param{dev}
-viene usato per indicare a quale dispositivo si fa riferimento.
+un file regolare (che sarà creato vuoto), \const{S\_IFBLK} per un dispositivo
+a blocchi, \const{S\_IFCHR} per un dispositivo a caratteri e \const{S\_IFIFO}
+per una fifo. Un valore diverso comporterà l'errore \errcode{EINVAL}. Qualora
+si sia specificato in \param{mode} un file di dispositivo, il valore di
+\param{dev} viene usato per indicare a quale dispositivo si fa riferimento.
 
 Solo l'amministratore può creare un file di dispositivo o un file regolare
 usando questa funzione; ma in Linux\footnote{la funzione non è prevista dallo
@@ -659,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
@@ -782,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
@@ -907,20 +909,27 @@ ed ordinamento) del contenuto di una directory; la funzione 
 
 Al solito, per la presenza fra gli argomenti di due puntatori a funzione, il
 prototipo non è molto comprensibile; queste funzioni però sono quelle che
-controllano rispettivamente la selezione di una voce (\param{select}) e
-l'ordinamento di tutte le voci selezionate (\param{compar}). 
+controllano rispettivamente la selezione di una voce (quella passata con
+l'argomento \param{select}) e l'ordinamento di tutte le voci selezionate
+(quella specificata dell'argomento \param{compar}).
 
 La funzione legge tutte le voci della directory indicata dall'argomento
-\param{dir}, passando ciascuna di esse come argomento alla funzione di
-\param{select}; se questa ritorna un valore diverso da zero la voce viene
-inserita in una struttura allocata dinamicamente con \func{malloc}, qualora si
-specifichi un valore \val{NULL} per \func{select} vengono selezionate tutte le
-voci. Tutte le voci selezionate vengono poi inserite un una lista (anch'essa
-allocata con \func{malloc}, che viene riordinata tramite \func{qsort} usando
-la funzione \param{compar} come criterio di ordinamento; alla fine l'indirizzo
-della lista ordinata è restituito nell'argomento \param{namelist}.
-
-Per l'ordinamento sono disponibili anche due funzioni predefinite,
+\param{dir}, passando ciascuna di esse (una struttura \struct{dirent}) come
+argomento della funzione di selezione specificata da \param{select}; se questa
+ritorna un valore diverso da zero la voce viene inserita in un vettore che
+viene allocato dinamicamente con \func{malloc}.  Qualora si specifichi un
+valore \val{NULL} per \func{select} vengono selezionate tutte le voci.
+
+Le voci selezionate possono essere riordinate tramite \func{qsort}, le modalità
+del riordinamento possono essere personalizzate usando la funzione
+\param{compar} come criterio di ordinamento di\func{qsort}, la funzione prende
+come argomenti le due strutture \struct{dirent} da confrontare restituendo un
+valore positivo, nullo o negativo per indicarne l'ordinamento; alla fine
+l'indirizzo della lista delle strutture \struct{dirent} così ordinate viene
+restituito nell'argomento \param{namelist}.
+
+Per l'ordinamento (vale a dire come valori possibili per l'argomento
+\param{compar}) sono disponibili anche due funzioni predefinite,
 \funcd{alphasort} e \funcd{versionsort}, i cui prototipi sono:
 \begin{functions}
   \headdecl{dirent.h} 
@@ -951,7 +960,7 @@ 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
-programma che, usando la routine di scansione illustrata in
+programma che, usando la funzione di scansione illustrata in
 fig.~\ref{fig:file_dirscan}, stampa i nomi dei file contenuti in una directory
 e la relativa dimensione (in sostanza una versione semplificata del comando
 \cmd{ls}).
@@ -993,7 +1002,7 @@ valore di ritorno per indicare una esecuzione senza errori.
   \begin{minipage}[c]{15.6cm}
     \includecodesample{listati/DirScan.c}
   \end{minipage}
-  \caption{Codice della routine di scansione di una directory contenuta nel
+  \caption{Codice della funzione di scansione di una directory contenuta nel
     file \file{DirScan.c}.} 
   \label{fig:file_dirscan}
 \end{figure}
@@ -1201,8 +1210,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}.
@@ -1244,7 +1253,7 @@ 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
@@ -1313,7 +1322,7 @@ della directory 
   condition}\itindex{race~condition} non si pongono.
 
 
-\section{La manipolazione delle caratteristiche dei files}
+\section{La manipolazione delle caratteristiche dei file}
 \label{sec:file_infos}
 
 Come spiegato in sez.~\ref{sec:file_filesystem} tutte le informazioni generali
@@ -1334,7 +1343,7 @@ sez.~\ref{sec:file_access_control}).
 La lettura delle informazioni relative ai file è fatta attraverso la famiglia
 delle funzioni \func{stat} (\funcd{stat}, \funcd{fstat} e \funcd{lstat});
 questa è la funzione che ad esempio usa il comando \cmd{ls} per poter ottenere
-e mostrare tutti i dati dei files. I prototipi di queste funzioni sono i
+e mostrare tutti i dati dei file. I prototipi di queste funzioni sono i
 seguenti:
 \begin{functions}
   \headdecl{sys/types.h} 
@@ -1347,7 +1356,7 @@ seguenti:
   
   \funcdecl{int lstat(const char *file\_name, struct stat *buf)} Identica a
   \func{stat} eccetto che se il \param{file\_name} è un link simbolico vengono
-  lette le informazioni relativae ad esso e non al file a cui fa riferimento.
+  lette le informazioni relative ad esso e non al file a cui fa riferimento.
   
   \funcdecl{int fstat(int filedes, struct stat *buf)} Identica a \func{stat}
   eccetto che si usa con un file aperto, specificato tramite il suo file
@@ -1449,9 +1458,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   \\
@@ -1819,9 +1828,10 @@ rispettivamente al proprietario, al gruppo, a tutti gli altri.
   \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}.
 
@@ -1912,8 +1922,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
@@ -1972,6 +1982,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
@@ -2026,27 +2039,32 @@ proposito).
 Infine Linux utilizza il bit \acr{sgid} per una ulteriore estensione mutuata
 da SVr4. Il caso in cui un file ha il bit \acr{sgid} impostato senza che lo
 sia anche il corrispondente bit di esecuzione viene utilizzato per attivare
-per quel file il \textit{mandatory locking} (affronteremo questo argomento in
-dettaglio più avanti, in sez.~\ref{sec:file_mand_locking}).
+per quel file il \itindex{mandatory~locking} \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
+memoria virtuale e l'accesso ai file 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 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 \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
@@ -2054,8 +2072,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
@@ -2072,13 +2090,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}
@@ -2184,8 +2204,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}}
@@ -2229,9 +2249,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  \\
@@ -2267,7 +2287,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
@@ -2280,28 +2300,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}
@@ -2377,12 +2399,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
@@ -2395,16 +2418,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
+\itindex{mandatory~locking} \textit{mandatory locking}.
 
 
 \subsection{Un quadro d'insieme sui permessi}
@@ -2437,7 +2455,8 @@ ha alcun effetto qualora il processo possieda i privilegi di amministratore.
     \hline
     1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del proprietario\\
     -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo proprietario\\
-    -&1&-&-&-&0&-&-&-&-&-&-&Il \textit{mandatory locking} è abilitato\\
+    -&1&-&-&-&0&-&-&-&-&-&-&Il \itindex{mandatory~locking} 
+                            \textit{mandatory locking} è abilitato\\
     -&-&1&-&-&-&-&-&-&-&-&-&Non utilizzato\\
     -&-&-&1&-&-&-&-&-&-&-&-&Permesso di lettura per il proprietario\\
     -&-&-&-&1&-&-&-&-&-&-&-&Permesso di scrittura per il proprietario\\
@@ -2455,14 +2474,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
@@ -2591,3 +2612,34 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+
+% LocalWords:  sez like filesystem unlink MacOS Windows VMS inode kernel unistd
+% LocalWords:  un'etichetta int const char oldpath newpath errno EXDEV EPERM st
+% LocalWords:  EEXIST EMLINK EACCES ENAMETOOLONG ENOTDIR EFAULT ENOMEM EROFS ls
+% LocalWords:  ELOOP ENOSPC EIO pathname nlink stat vfat fsck EISDIR ENOENT cap
+% LocalWords:  POSIX socket fifo sticky root nell'inode system call count crash
+% LocalWords:  all'inode descriptor remove rename rmdir stdio glibc libc NFS DT
+% LocalWords:  ENOTEMPTY EBUSY mount point EINVAL soft symbolic tab symlink fig
+% LocalWords:  dangling access chdir chmod chown creat exec lchown lstat mkdir
+% LocalWords:  mkfifo mknod opendir pathconf readlink truncate path buff size
+% LocalWords:  grub bootloader grep linux MAXSYMLINKS cat VFS sys dirname fcntl
+% LocalWords:  dev l'inode umask IFREG IFBLK IFCHR IFIFO SVr sgid BSD SVID NULL
+% LocalWords:  stream dirent EMFILE ENFILE dirfd SOURCE fchdir readdir struct
+% LocalWords:  EBADF namlen HAVE thread entry result value argument fileno ino
+% LocalWords:  name TYPE OFF RECLEN UNKNOWN REG SOCK CHR BLK type IFTODT DTTOIF
+% LocalWords:  DTYPE off reclen seekdir telldir void rewinddir closedir select
+% LocalWords:  namelist compar malloc qsort alphasort versionsort strcoll myls
+% LocalWords:  strcmp DirScan direntry while current working home shell pwd get
+% LocalWords:  dell'inode getcwd ERANGE getwd change fd race condition tmpnam
+% LocalWords:  string tmpdir TMP tempnam pfx TMPNAME suid tmp EXCL tmpfile pid
+% LocalWords:  EINTR mktemp mkstemp stlib template filename XXXXXX OpenBSD buf
+% LocalWords:  mkdtemp fstat filedes nell'header padding ISREG ISDIR ISCHR IFMT
+% LocalWords:  ISBLK ISFIFO ISLNK ISSOCK IFSOCK IFLNK IFDIR ISUID UID ISGID GID
+% LocalWords:  ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH du
+% LocalWords:  blocks blksize holes lseek TRUNC ftruncate length lenght ETXTBSY
+% LocalWords:  hole atime read utime mtime write ctime modification leafnode cp
+% LocalWords:  make fchmod fchown utimbuf times actime modtime Mac owner uid fs
+% LocalWords:  gid Control List patch mandatory control execute group other all
+% LocalWords:  dell' effective passwd IGID locking swap saved text IRWXU IRWXG
+% LocalWords:  IRWXO ext reiser capability FSETID mask capabilities chroot jail
+% LocalWords:  FTP