Materiale sui socket.
[gapil.git] / filedir.tex
index b73660a3ed85215c4e69e0fbfe55b78bc9500957..e4d61d0e270dbcc52b34e07609976bd41eb34748 100644 (file)
@@ -8,6 +8,7 @@
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
+
 \chapter{File e directory}
 \label{cha:files_and_dirs}
 
@@ -78,8 +79,8 @@ suole chiamare questo tipo di associazione un collegamento diretto (o
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore nel qual caso \var{errno} viene impostata ai valori:
   \begin{errlist}
-  \item[\errcode{EXDEV}] \param{oldpath} e \param{newpath} non sono sullo
-    stesso filesystem.
+  \item[\errcode{EXDEV}] i file \param{oldpath} e \param{newpath} non sono
+    sullo stesso filesystem.
   \item[\errcode{EPERM}] il filesystem che contiene \param{oldpath} e
     \param{newpath} non supporta i link diretti o è una directory.
   \item[\errcode{EEXIST}] un file (o una directory) con quel nome esiste di
@@ -255,7 +256,7 @@ 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}
+  \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} 
@@ -429,10 +430,9 @@ buffer, e lo richiude. Si tenga presente che la funzione non termina la
 stringa con un carattere nullo e la tronca alla dimensione specificata da
 \param{size} per evitare di sovrascrivere oltre le dimensioni del buffer.
 
-
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=8cm]{img/link_loop}
+  \includegraphics[width=8.5cm]{img/link_loop}
   \caption{Esempio di loop nel filesystem creato con un link simbolico.}
   \label{fig:file_link_loop}
 \end{figure}
@@ -486,10 +486,10 @@ ci mostrerebbe invece l'esistenza di \file{temporaneo}.
 Benché in sostanza le directory non siano altro che dei file contenenti
 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 è:
+opportuna system call.\footnote{questo è quello che 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}
@@ -500,18 +500,17 @@ prototipo 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\errcode{EEXIST}] Un file (o una directory) con quel nome esiste di
+  \item[\errcode{EEXIST}] un file (o una directory) con quel nome esiste di
     già.
-  \item[\errcode{EACCES}] 
-    Non c'è il permesso di scrittura per la directory in cui si vuole inserire
-    la nuova directory.
-  \item[\errcode{EMLINK}] La directory in cui si vuole creare la nuova
-    directory contiene troppi file. Sotto Linux questo normalmente non avviene
+  \item[\errcode{EACCES}] non c'è il permesso di scrittura per la directory in
+    cui si vuole inserire la nuova directory.
+  \item[\errcode{EMLINK}] la directory in cui si vuole creare la nuova
+    directory contiene troppi file; sotto Linux questo normalmente non avviene
     perché il filesystem standard consente la creazione di un numero di file
     maggiore di quelli che possono essere contenuti nel disco, ma potendo
     avere a che fare anche con filesystem di altri sistemi questo errore può
     presentarsi.
-  \item[\errcode{ENOSPC}] Non c'è abbastanza spazio sul file system per creare
+  \item[\errcode{ENOSPC}] non c'è abbastanza spazio sul file system per creare
     la nuova directory o si è esaurita la quota disco dell'utente.
   \end{errlist}
   ed inoltre anche \errval{EPERM}, \errval{EFAULT}, \errval{ENAMETOOLONG},
@@ -520,44 +519,46 @@ prototipo 
 \end{functions}
 
 La funzione crea una nuova directory vuota, che contiene cioè solo le due voci
-standard (\file{.} e \file{..}), con il nome indicato dall'argomento
-\param{dirname}. Il nome può essere indicato sia come \itindex{pathname}
-\textit{pathname} assoluto che relativo.
-
-I permessi di accesso alla directory (vedi sez.~\ref{sec:file_access_control})
-sono specificati da \param{mode}, i cui possibili valori sono riportati in
-tab.~\ref{tab:file_permission_const}; questi sono modificati dalla maschera di
-creazione dei file (si veda sez.~\ref{sec:file_perm_management}).  La
-titolarità della nuova directory è impostata secondo quanto riportato in
+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.
+
+I permessi di accesso (vedi sez.~\ref{sec:file_access_control}) con cui la
+directory viene creata sono specificati dall'argomemto \param{mode}, i cui
+possibili valori sono riportati in tab.~\ref{tab:file_permission_const}; si
+tenga presente che questi sono modificati dalla maschera di creazione dei file
+(si veda sez.~\ref{sec:file_perm_management}).  La titolarità della nuova
+directory è impostata secondo quanto riportato in
 sez.~\ref{sec:file_ownership_management}.
 
-La funzione per la cancellazione di una directory è \funcd{rmdir}, il suo
-prototipo è:
+La funzione che permette la cancellazione di una directory è invece
+\funcd{rmdir}, ed il suo prototipo è:
 \begin{prototype}{sys/stat.h}{int rmdir(const char *dirname)} 
   Cancella una directory.
 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] Il filesystem non supporta la cancellazione di
+  \item[\errcode{EPERM}] il filesystem non supporta la cancellazione di
     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
+  \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
     \param{dirname}.
-  \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la
+  \item[\errcode{EBUSY}] la directory specificata è la directory di lavoro o la
     radice di qualche processo.
-  \item[\errcode{ENOTEMPTY}] La directory non è vuota.
+  \item[\errcode{ENOTEMPTY}] la directory non è vuota.
   \end{errlist}
   ed inoltre anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
   \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.}
 \end{prototype}
 
 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}
+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.
 
 La modalità con cui avviene la cancellazione è analoga a quella di
@@ -565,8 +566,8 @@ La modalit
 directory non diventa nullo e nessun processo ha la directory aperta lo spazio
 occupato su disco non viene rilasciato. Se un processo ha la directory aperta
 la funzione rimuove il link \index{inode} all'inode e nel caso sia l'ultimo,
-pure le voci standard \file{.} e \file{..}, a questo punto il kernel non
-consentirà di creare più nuovi file nella directory.
+pure le voci standard ``\file{.}'' e ``\file{..}'', a questo punto il kernel
+non consentirà di creare più nuovi file nella directory.
 
 
 \subsection{La creazione di file speciali}
@@ -594,10 +595,10 @@ di queste funzioni 
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] Non si hanno privilegi sufficienti a creare l'inode, o
+  \item[\errcode{EPERM}] non si hanno privilegi sufficienti a creare l'inode, o
     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
+  \item[\errcode{EINVAL}] il valore di \param{mode} non indica un file, una
     fifo o un dispositivo.
   \item[\errcode{EEXIST}] \param{pathname} esiste già o è un link simbolico.
   \end{errlist}
@@ -774,16 +775,16 @@ 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
-  la presenza del campo \var{d\_fileno}, identico \var{d\_ino}, che in Linux è
-  definito come alias di quest'ultimo. Il campo \var{d\_name} è considerato
-  dipendente dall'implementazione.} prevedono che siano sempre presenti il
-campo \var{d\_name}, che contiene il nome del file nella forma di una stringa
-terminata da uno zero,\footnote{lo standard POSIX non specifica una lunghezza,
-  ma solo un limite \const{NAME\_MAX}; in SVr4 la lunghezza del campo è
-  definita come \code{NAME\_MAX+1} che di norma porta al valore di 256 byte
-  usato anche in Linux.} ed il campo \var{d\_ino}, che contiene il numero di
-\index{inode} inode cui il file è associato (di solito corrisponde al campo
+presenti nella directory; sia BSD che SVr4\footnote{lo standard POSIX prevede
+  invece solo la presenza del campo \var{d\_fileno}, identico \var{d\_ino},
+  che in Linux è definito come alias di quest'ultimo. Il campo \var{d\_name} è
+  considerato dipendente dall'implementazione.} prevedono che siano sempre
+presenti il campo \var{d\_name}, che contiene il nome del file nella forma di
+una stringa terminata da uno zero,\footnote{lo standard POSIX non specifica
+  una lunghezza, ma solo un limite \const{NAME\_MAX}; in SVr4 la lunghezza del
+  campo è definita come \code{NAME\_MAX+1} che di norma porta al valore di 256
+  byte usato anche in Linux.} ed il campo \var{d\_ino}, che contiene il numero
+di \index{inode} inode cui il file è associato (di solito corrisponde al campo
 \var{st\_ino} di \struct{stat}).
 
 \begin{figure}[!htb]
@@ -808,16 +809,16 @@ il nome del relativo campo; nel nostro caso sono definite le macro
   \footnotesize
   \begin{tabular}[c]{|l|l|}
     \hline
-    \textbf{Valore} & \textbf{Significato} \\
+    \textbf{Valore} & \textbf{Tipo di file} \\
     \hline
     \hline
-    \const{DT\_UNKNOWN} & tipo sconosciuto. \\
-    \const{DT\_REG}     & file normale. \\
-    \const{DT\_DIR}     & directory. \\
-    \const{DT\_FIFO}    & fifo. \\
-    \const{DT\_SOCK}    & socket. \\
-    \const{DT\_CHR}     & dispositivo a caratteri. \\
-    \const{DT\_BLK}     & dispositivo a blocchi. \\
+    \const{DT\_UNKNOWN} & Tipo sconosciuto.\\
+    \const{DT\_REG}     & File normale.\\
+    \const{DT\_DIR}     & Directory.\\
+    \const{DT\_FIFO}    & Fifo.\\
+    \const{DT\_SOCK}    & Socket.\\
+    \const{DT\_CHR}     & Dispositivo a caratteri.\\
+    \const{DT\_BLK}     & Dispositivo a blocchi.\\
     \hline    
   \end{tabular}
   \caption{Costanti che indicano i vari tipi di file nel campo \var{d\_type}
@@ -1082,11 +1083,11 @@ prototipo 
     \val{NULL} se fallisce, in quest'ultimo caso la variabile
     \var{errno} è impostata con i seguenti codici di errore:
   \begin{errlist}
-  \item[\errcode{EINVAL}] L'argomento \param{size} è zero e \param{buffer} non
+  \item[\errcode{EINVAL}] l'argomento \param{size} è zero e \param{buffer} non
     è nullo.
-  \item[\errcode{ERANGE}] L'argomento \param{size} è più piccolo della
+  \item[\errcode{ERANGE}] l'argomento \param{size} è più piccolo della
     lunghezza del \textit{pathname}. 
-  \item[\errcode{EACCES}] Manca il permesso di lettura o di ricerca su uno dei
+  \item[\errcode{EACCES}] manca il permesso di lettura o di ricerca su uno dei
     componenti del \textit{pathname} (cioè su una delle directory superiori
     alla corrente).
   \end{errlist}}
@@ -1133,8 +1134,8 @@ Per cambiare la directory di lavoro si pu
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 per un errore,
     nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
-  \item[\errcode{ENOTDIR}] Non si è specificata una directory.
-  \item[\errcode{EACCES}] Manca il permesso di ricerca su uno dei componenti
+  \item[\errcode{ENOTDIR}] non si è specificata una directory.
+  \item[\errcode{EACCES}] manca il permesso di ricerca su uno dei componenti
     di \param{path}.
   \end{errlist}
   ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
@@ -1240,8 +1241,8 @@ POSIX definisce la funzione \funcd{tmpfile}, il cui prototipo 
     temporaneo in caso di successo e \val{NULL} in caso di errore, nel qual
     caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
-    \item[\errcode{EEXIST}] Non è stato possibile generare un nome univoco.
+    \item[\errcode{EINTR}] la funzione è stata interrotta da un segnale.
+    \item[\errcode{EEXIST}] non è stato possibile generare un nome univoco.
     \end{errlist}
     ed inoltre \errval{EFAULT}, \errval{EMFILE}, \errval{ENFILE},
     \errval{ENOSPC}, \errval{EROFS} e \errval{EACCES}.}
@@ -1422,13 +1423,13 @@ riportato in tab.~\ref{tab:file_type_macro}.
     \textbf{Macro} & \textbf{Tipo del file} \\
     \hline
     \hline
-    \macro{S\_ISREG(m)}  & file regolare \\
-    \macro{S\_ISDIR(m)}  & directory \\
-    \macro{S\_ISCHR(m)}  & dispositivo a caratteri \\
-    \macro{S\_ISBLK(m)}  & dispositivo a blocchi\\
-    \macro{S\_ISFIFO(m)} & fifo \\
-    \macro{S\_ISLNK(m)}  & link simbolico \\
-    \macro{S\_ISSOCK(m)} & socket \\
+    \macro{S\_ISREG(m)}  & File normale.\\
+    \macro{S\_ISDIR(m)}  & Directory.\\
+    \macro{S\_ISCHR(m)}  & Dispositivo a caratteri.\\
+    \macro{S\_ISBLK(m)}  & Dispositivo a blocchi.\\
+    \macro{S\_ISFIFO(m)} & Fifo.\\
+    \macro{S\_ISLNK(m)}  & Link simbolico.\\
+    \macro{S\_ISSOCK(m)} & Socket.\\
     \hline    
   \end{tabular}
   \caption{Macro per i tipi di file (definite in \texttt{sys/stat.h}).}
@@ -1455,33 +1456,33 @@ un'opportuna combinazione.
     \textbf{Flag} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{S\_IFMT}   &  0170000 & maschera per i bit del tipo di file \\
-    \const{S\_IFSOCK} &  0140000 & socket             \\
-    \const{S\_IFLNK}  &  0120000 & link simbolico     \\
-    \const{S\_IFREG}  &  0100000 & file regolare      \\ 
-    \const{S\_IFBLK}  &  0060000 & dispositivo a blocchi   \\
-    \const{S\_IFDIR}  &  0040000 & directory          \\ 
-    \const{S\_IFCHR}  &  0020000 & dispositivo a caratteri \\
-    \const{S\_IFIFO}  &  0010000 & fifo               \\
+    \const{S\_IFMT}   &  0170000 & Maschera per i bit del tipo di file.\\
+    \const{S\_IFSOCK} &  0140000 & Socket.\\
+    \const{S\_IFLNK}  &  0120000 & Link simbolico.\\
+    \const{S\_IFREG}  &  0100000 & File regolare.\\ 
+    \const{S\_IFBLK}  &  0060000 & Dispositivo a blocchi.\\
+    \const{S\_IFDIR}  &  0040000 & Directory.\\
+    \const{S\_IFCHR}  &  0020000 & Dispositivo a caratteri.\\
+    \const{S\_IFIFO}  &  0010000 & Fifo.\\
     \hline
-    \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}\\
+    \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   \\
-    \const{S\_IWUSR}  &  00200   & il proprietario ha permesso di scrittura \\
-    \const{S\_IXUSR}  &  00100   & il proprietario ha permesso di esecuzione\\
+%    \const{S\_IRWXU}  &  00700   & Bitmask per i permessi del proprietario.\\
+    \const{S\_IRUSR}  &  00400   & Il proprietario ha permesso di lettura.\\
+    \const{S\_IWUSR}  &  00200   & Il proprietario ha permesso di scrittura.\\
+    \const{S\_IXUSR}  &  00100   & Il proprietario ha permesso di esecuzione.\\
     \hline
-%    \const{S\_IRWXG}  &  00070   & bitmask per i permessi del gruppo        \\
-    \const{S\_IRGRP}  &  00040   & il gruppo ha permesso di lettura         \\
-    \const{S\_IWGRP}  &  00020   & il gruppo ha permesso di scrittura       \\
-    \const{S\_IXGRP}  &  00010   & il gruppo ha permesso di esecuzione      \\
+%    \const{S\_IRWXG}  &  00070   & Bitmask per i permessi del gruppo.\\
+    \const{S\_IRGRP}  &  00040   & Il gruppo ha permesso di lettura.\\
+    \const{S\_IWGRP}  &  00020   & Il gruppo ha permesso di scrittura.\\
+    \const{S\_IXGRP}  &  00010   & Il gruppo ha permesso di esecuzione.\\
     \hline
-%    \const{S\_IRWXO}  &  00007   & bitmask per i permessi di tutti gli altri\\
-    \const{S\_IROTH}  &  00004   & gli altri hanno permesso di lettura      \\
-    \const{S\_IWOTH}  &  00002   & gli altri hanno permesso di esecuzione   \\
-    \const{S\_IXOTH}  &  00001   & gli altri hanno permesso di esecuzione   \\
+%    \const{S\_IRWXO}  &  00007   & Bitmask per i permessi di tutti gli altri\\
+    \const{S\_IROTH}  &  00004   & Gli altri hanno permesso di lettura.\\
+    \const{S\_IWOTH}  &  00002   & Gli altri hanno permesso di esecuzione.\\
+    \const{S\_IXOTH}  &  00001   & Gli altri hanno permesso di esecuzione.\\
     \hline    
   \end{tabular}
   \caption{Costanti per l'identificazione dei vari bit che compongono il campo
@@ -1556,7 +1557,7 @@ dimensione si possono usare le due funzioni \funcd{truncate} e
   \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}.
-  \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione.
+  \item[\errcode{ETXTBSY}] il file è un programma in esecuzione.
   \end{errlist}
   ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
   \errval{EROFS}, \errval{EIO}, \errval{EFAULT}, \errval{ELOOP}.}
@@ -1589,12 +1590,12 @@ funzioni che effettuano cambiamenti su di essi.
     & \textbf{Opzione di \cmd{ls}} \\
     \hline
     \hline
-    \var{st\_atime}& ultimo accesso ai dati del file &\func{read}, 
-    \func{utime} & \cmd{-u}\\ 
-    \var{st\_mtime}& ultima modifica ai dati del file &\func{write}, 
-    \func{utime} & default\\ 
-    \var{st\_ctime}& ultima modifica ai dati dell'inode&\func{chmod}, 
-    \func{utime} & \cmd{-c} \\ 
+    \var{st\_atime}& ultimo accesso ai dati del file    &
+                     \func{read}, \func{utime}          & \cmd{-u}\\
+    \var{st\_mtime}& ultima modifica ai dati del file   &
+                     \func{write}, \func{utime}         & default\\
+    \var{st\_ctime}& ultima modifica ai dati dell'inode &
+                     \func{chmod}, \func{utime}         & \cmd{-c}\\
     \hline
   \end{tabular}
   \caption{I tre tempi associati a ciascun file.}
@@ -1642,47 +1643,54 @@ tempo).
     \hline
     \hline
     \func{chmod}, \func{fchmod} 
-    & --      & --      &$\bullet$& --      & --      & --      & \\
+             & --      & --      &$\bullet$& --      & --      & --      &\\
     \func{chown}, \func{fchown} 
-    & --      & --      &$\bullet$& --      & --      & --      & \\
+             & --      & --      &$\bullet$& --      & --      & --      &\\
+    \func{creat}  
+             &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$&  
+             con \const{O\_CREATE} \\
     \func{creat}  
-    &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$&  con 
-    \const{O\_CREATE} \\    \func{creat}  
-    & --      &$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$&   
-    con \const{O\_TRUNC} \\    \func{exec}  
-    &$\bullet$& --      & --      & --      & --      & --      & \\
+             & --      &$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$&   
+             con \const{O\_TRUNC} \\
+    \func{exec}  
+             &$\bullet$& --      & --      & --      & --      & --      &\\
     \func{lchown}  
-    & --      & --      &$\bullet$& --      & --      & --      & \\
+             & --      & --      &$\bullet$& --      & --      & --      &\\
     \func{link}
-    & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$& \\
+             & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$&\\
     \func{mkdir}
-    &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$& \\
+             &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$&\\
     \func{mkfifo}
-    &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$& \\
+             &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$&\\
     \func{open}
-    &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$& con 
-    \const{O\_CREATE} \\    \func{open}
-    & --      &$\bullet$&$\bullet$& --      & --      & --      & con 
-    \const{O\_TRUNC}  \\    \func{pipe}
-    &$\bullet$&$\bullet$&$\bullet$& --      & --      & --      & \\
+             &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$& 
+             con \const{O\_CREATE} \\
+    \func{open}
+             & --      &$\bullet$&$\bullet$& --      & --      & --      & 
+             con \const{O\_TRUNC}  \\
+    \func{pipe}
+             &$\bullet$&$\bullet$&$\bullet$& --      & --      & --      &\\
     \func{read}
-    &$\bullet$& --      & --      & --      & --      & --      & \\
+             &$\bullet$& --      & --      & --      & --      & --      &\\
+    \func{remove}
+             & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$& 
+             se esegue \func{unlink}\\
     \func{remove}
-    & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$& se esegue 
-    \func{unlink}\\    \func{remove}
-    & --      & --      & --      & --      &$\bullet$&$\bullet$& se esegue 
-    \func{rmdir}\\ \func{rename}
-    & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$& per entrambi
-    gli argomenti\\ \func{rmdir}
-    & --      & --      & --      & --      &$\bullet$&$\bullet$& \\ 
+              & --      & --      & --      & --      &$\bullet$&$\bullet$& 
+              se esegue \func{rmdir}\\
+    \func{rename}
+              & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$& 
+              per entrambi gli argomenti\\
+    \func{rmdir}
+              & --      & --      & --      & --      &$\bullet$&$\bullet$&\\ 
     \func{truncate}, \func{ftruncate}
-    & --      &$\bullet$&$\bullet$& --      & --      & --      & \\ 
+              & --      &$\bullet$&$\bullet$& --      & --      & --      &\\ 
     \func{unlink}
-    & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$& \\ 
+              & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$&\\ 
     \func{utime}
-    &$\bullet$&$\bullet$&$\bullet$& --      & --      & --      & \\ 
+              &$\bullet$&$\bullet$&$\bullet$& --      & --      & --      &\\ 
     \func{write}
-    & --      &$\bullet$&$\bullet$& --      & --      & --      & \\ 
+              & --      &$\bullet$&$\bullet$& --      & --      & --      &\\ 
     \hline
   \end{tabular}
   \caption{Prospetto dei cambiamenti effettuati sui tempi di ultimo 
@@ -1776,7 +1784,7 @@ realizzare.
 Una delle caratteristiche fondamentali di tutti i sistemi unix-like è quella
 del controllo di accesso ai file, che viene implementato per qualunque
 filesystem standard.\footnote{per standard si intende che implementa le
-  caratteristiche previste dallo standard POSIX. In Linux sono disponibili
+  caratteristiche previste dallo standard POSIX; in Linux sono disponibili
   anche una serie di altri filesystem, come quelli di Windows e del Mac, che
   non supportano queste caratteristiche.} In questa sezione ne esamineremo i
 concetti essenziali e le funzioni usate per gestirne i vari aspetti.
@@ -1790,7 +1798,7 @@ cosiddetto \textit{owner}) ed un gruppo di appartenenza, secondo il meccanismo
 degli identificatori di utente e gruppo (\acr{uid} e \acr{gid}). Questi valori
 sono accessibili da programma tramite la funzione \func{stat}, e sono
 mantenuti nei campi \var{st\_uid} e \var{st\_gid} della struttura
-\struct{stat} (si veda sez.~\ref{sec:file_stat}).\footnote{Questo è vero solo
+\struct{stat} (si veda sez.~\ref{sec:file_stat}).\footnote{questo è vero solo
   per filesystem di tipo Unix, ad esempio non è vero per il filesystem vfat di
   Windows, che non fornisce nessun supporto per l'accesso multiutente, e per
   il quale i permessi vengono assegnati in maniera fissa con un opzione in
@@ -1799,12 +1807,12 @@ mantenuti nei campi \var{st\_uid} e \var{st\_gid} della struttura
 Il controllo di accesso ai file segue un modello abbastanza semplice che
 prevede tre permessi fondamentali strutturati su tre livelli di accesso.
 Esistono varie estensioni a questo modello,\footnote{come le \textit{Access
-    Control List} che possono essere aggiunte al filesystem standard con
-  opportune patch, la cui introduzione nei kernel ufficiali è iniziata con la
-  serie 2.5.x. per arrivare a meccanismi di controllo ancora più sofisticati
-  come il \textit{mandatory access control} di SE-Linux.} ma nella maggior
-parte dei casi il meccanismo standard è più che sufficiente a soddisfare tutte
-le necessità più comuni.  I tre permessi di base associati ad ogni file sono:
+    Control List} che sono state aggiunte ai filesystem standard con opportune
+  estensioni (vedi sez.~\ref{sec:file_ACL}) per arrivare a meccanismi di
+  controllo ancora più sofisticati come il \textit{mandatory access control}
+  di SE-Linux.} ma nella maggior parte dei casi il meccanismo standard è più
+che sufficiente a soddisfare tutte le necessità più comuni.  I tre permessi di
+base associati ad ogni file sono:
 \begin{itemize*}
 \item il permesso di lettura (indicato con la lettera \texttt{r}, dall'inglese
   \textit{read}).
@@ -1864,17 +1872,17 @@ che permettono di accedere al valore numerico di questi bit nel campo
     \textbf{\var{st\_mode}} bit & \textbf{Significato} \\
     \hline 
     \hline 
-    \const{S\_IRUSR}  &  \textit{user-read}, l'utente può leggere     \\
-    \const{S\_IWUSR}  &  \textit{user-write}, l'utente può scrivere   \\
-    \const{S\_IXUSR}  &  \textit{user-execute}, l'utente può eseguire \\ 
-    \hline              
-    \const{S\_IRGRP}  &  \textit{group-read}, il gruppo può leggere    \\
-    \const{S\_IWGRP}  &  \textit{group-write}, il gruppo può scrivere  \\
-    \const{S\_IXGRP}  &  \textit{group-execute}, il gruppo può eseguire\\
-    \hline              
-    \const{S\_IROTH}  &  \textit{other-read}, tutti possono leggere    \\
-    \const{S\_IWOTH}  &  \textit{other-write}, tutti possono scrivere  \\
-    \const{S\_IXOTH}  &  \textit{other-execute}, tutti possono eseguire\\
+    \const{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\
+    \const{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\
+    \const{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\ 
+    \hline            
+    \const{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\
+    \const{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\
+    \const{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\
+    \hline            
+    \const{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\
+    \const{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\
+    \const{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\
     \hline              
   \end{tabular}
   \caption{I bit dei permessi di accesso ai file, come definiti in 
@@ -2158,10 +2166,10 @@ contrario (o di errore) ritorna -1.
     \textbf{\param{mode}} & \textbf{Significato} \\
     \hline
     \hline
-    \const{R\_OK} & verifica il permesso di lettura \\
-    \const{W\_OK} & verifica il permesso di scritture \\
-    \const{X\_OK} & verifica il permesso di esecuzione \\
-    \const{F\_OK} & verifica l'esistenza del file \\
+    \const{R\_OK} & Verifica il permesso di lettura. \\
+    \const{W\_OK} & Verifica il permesso di scrittura. \\
+    \const{X\_OK} & Verifica il permesso di esecuzione. \\
+    \const{F\_OK} & Verifica l'esistenza del file. \\
     \hline
   \end{tabular}
   \caption{Valori possibile per l'argomento \param{mode} della funzione 
@@ -2190,9 +2198,9 @@ filename e su un file descriptor, i loro prototipi sono:
   \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
     un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del
+  \item[\errcode{EPERM}] l'user-ID effettivo non corrisponde a quello del
     proprietario del file o non è zero.
-    \item[\errcode{EROFS}] Il file è su un filesystem in sola lettura.
+    \item[\errcode{EROFS}] il file è su un filesystem in sola lettura.
   \end{errlist}
   ed inoltre \errval{EIO}; \func{chmod} restituisce anche \errval{EFAULT},
   \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR},
@@ -2212,24 +2220,24 @@ file.
     \textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \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}\\
+    \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  \\
-    \const{S\_IWUSR} & 00200 & l'utente ha il permesso di scrittura \\
-    \const{S\_IXUSR} & 00100 & l'utente ha il permesso di esecuzione \\
+    \const{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\
+    \const{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\
+    \const{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\
+    \const{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\
     \hline
-    \const{S\_IRWXG} & 00070 & il gruppo ha tutti i permessi  \\
-    \const{S\_IRGRP} & 00040 & il gruppo ha il permesso di lettura  \\
-    \const{S\_IWGRP} & 00020 & il gruppo ha il permesso di scrittura \\
-    \const{S\_IXGRP} & 00010 & il gruppo ha il permesso di esecuzione \\
+    \const{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\
+    \const{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\
+    \const{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\
+    \const{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\
     \hline
-    \const{S\_IRWXO} & 00007 & gli altri hanno tutti i permessi \\
-    \const{S\_IROTH} & 00004 & gli altri hanno il permesso di lettura  \\
-    \const{S\_IWOTH} & 00002 & gli altri hanno il permesso di scrittura \\
-    \const{S\_IXOTH} & 00001 & gli altri hanno il permesso di esecuzione \\
+    \const{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\
+    \const{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\
+    \const{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\
+    \const{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\
     \hline
   \end{tabular}
   \caption{Valori delle costanti usate per indicare i vari bit di
@@ -2383,7 +2391,7 @@ sono:
   \bodydesc{Le funzioni restituiscono zero in caso di successo e -1 per
     un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] L'user-ID effettivo non corrisponde a quello del
+  \item[\errcode{EPERM}] l'user-ID effettivo non corrisponde a quello del
     proprietario del file o non è zero, o utente e gruppo non sono validi
   \end{errlist}
   Oltre a questi entrambe restituiscono gli errori \errval{EROFS} e
@@ -2427,17 +2435,19 @@ riepilogo in cui si riassumono le caratteristiche di ciascuno di essi, in modo
 da poter fornire un quadro d'insieme.
 
 In tab.~\ref{tab:file_fileperm_bits} si sono riassunti gli effetti dei vari
-bit per un file; per quanto riguarda l'applicazione dei permessi per
-proprietario, gruppo ed altri si ricordi quanto illustrato in
-sez.~\ref{sec:file_perm_overview}. Si rammenti che il valore dei permessi non
-ha alcun effetto qualora il processo possieda i privilegi di amministratore.
+bit dei permessi per un file; per quanto riguarda l'applicazione dei permessi
+per proprietario, gruppo ed altri si ricordi quanto illustrato in
+sez.~\ref{sec:file_perm_overview}.  Per compattezza, nella tabelle 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}.
 
 \begin{table}[!htb]
   \centering
   \footnotesize
   \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|l|}
     \hline
-    \multicolumn{3}{|c|}{}&
+    \multicolumn{3}{|c|}{special}&
     \multicolumn{3}{|c|}{user}&
     \multicolumn{3}{|c|}{group}&
     \multicolumn{3}{|c|}{other}&
@@ -2446,20 +2456,20 @@ ha alcun effetto qualora il processo possieda i privilegi di amministratore.
     \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\
     \hline
     \hline
-    1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del proprietario\\
-    -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo proprietario\\
-    -&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\\
-    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di esecuzione per il proprietario\\
-    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di lettura per il gruppo proprietario\\
-    -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo proprietario\\
-    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di esecuzione per il gruppo proprietario\\
-    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di lettura per tutti gli altri\\
-    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di scrittura per tutti gli altri \\
-    -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri\\
+   1&-&-&-&-&-&-&-&-&-&-&-&Se eseguito ha i permessi del proprietario.\\
+   -&1&-&-&-&1&-&-&-&-&-&-&Se eseguito ha i permessi del gruppo proprietario.\\
+   -&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.\\
+   -&-&-&-&-&1&-&-&-&-&-&-&Permesso di esecuzione per il proprietario.\\
+   -&-&-&-&-&-&1&-&-&-&-&-&Permesso di lettura per il gruppo proprietario.\\
+   -&-&-&-&-&-&-&1&-&-&-&-&Permesso di scrittura per il gruppo proprietario.\\
+   -&-&-&-&-&-&-&-&1&-&-&-&Permesso di esecuzione per il gruppo proprietario.\\
+   -&-&-&-&-&-&-&-&-&1&-&-&Permesso di lettura per tutti gli altri.\\
+   -&-&-&-&-&-&-&-&-&-&1&-&Permesso di scrittura per tutti gli altri.\\
+   -&-&-&-&-&-&-&-&-&-&-&1&Permesso di esecuzione per tutti gli altri.\\
     \hline
   \end{tabular}
   \caption{Tabella riassuntiva del significato dei bit dei permessi per un
@@ -2467,11 +2477,6 @@ 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 \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 \itindex{suid~bit} \textit{suid}, \itindex{sgid~bit}
@@ -2483,7 +2488,7 @@ illustrata in fig.~\ref{fig:file_perm_bit}.
   \footnotesize
   \begin{tabular}[c]{|c|c|c|c|c|c|c|c|c|c|c|c|l|}
     \hline
-    \multicolumn{3}{|c|}{}&
+    \multicolumn{3}{|c|}{special}&
     \multicolumn{3}{|c|}{user}&
     \multicolumn{3}{|c|}{group}&
     \multicolumn{3}{|c|}{other}&
@@ -2492,18 +2497,23 @@ illustrata in fig.~\ref{fig:file_perm_bit}.
     \acr{s}&\acr{s}&\acr{t}&r&w&x&r&w&x&r&w&x& \\
     \hline
     \hline
-    1&-&-&-&-&-&-&-&-&-&-&-&Non utilizzato\\
-    -&1&-&-&-&-&-&-&-&-&-&-&Propaga il gruppo proprietario ai nuovi file creati\\
-    -&-&1&-&-&-&-&-&-&-&-&-&Limita l'accesso in scrittura dei file nella directory\\
-    -&-&-&1&-&-&-&-&-&-&-&-&Permesso di visualizzazione per il proprietario\\
-    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di aggiornamento per il proprietario\\
-    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di attraversamento per il proprietario\\
-    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di visualizzazione per il gruppo proprietario\\
-    -&-&-&-&-&-&-&1&-&-&-&-&Permesso di aggiornamento per il gruppo proprietario\\
-    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di attraversamento per il gruppo proprietario\\
-    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di visualizzazione per tutti gli altri\\
-    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di aggiornamento per tutti gli altri \\
-    -&-&-&-&-&-&-&-&-&-&-&1&Permesso di attraversamento per tutti gli altri\\
+    1&-&-&-&-&-&-&-&-&-&-&-&Non utilizzato.\\
+    -&1&-&-&-&-&-&-&-&-&-&-&Propaga il gruppo proprietario ai nuovi file 
+                            creati.\\
+    -&-&1&-&-&-&-&-&-&-&-&-&Limita l'accesso in scrittura dei file nella 
+                            directory.\\
+    -&-&-&1&-&-&-&-&-&-&-&-&Permesso di visualizzazione per il proprietario.\\
+    -&-&-&-&1&-&-&-&-&-&-&-&Permesso di aggiornamento per il proprietario.\\
+    -&-&-&-&-&1&-&-&-&-&-&-&Permesso di attraversamento per il proprietario.\\
+    -&-&-&-&-&-&1&-&-&-&-&-&Permesso di visualizzazione per il gruppo 
+                            proprietario.\\
+    -&-&-&-&-&-&-&1&-&-&-&-&Permesso di aggiornamento per il gruppo 
+                            proprietario.\\
+    -&-&-&-&-&-&-&-&1&-&-&-&Permesso di attraversamento per il gruppo 
+                            proprietario.\\
+    -&-&-&-&-&-&-&-&-&1&-&-&Permesso di visualizzazione per tutti gli altri.\\
+    -&-&-&-&-&-&-&-&-&-&1&-&Permesso di aggiornamento per tutti gli altri.\\
+    -&-&-&-&-&-&-&-&-&-&-&1&Permesso di attraversamento per tutti gli altri.\\
     \hline
   \end{tabular}
   \caption{Tabella riassuntiva del significato dei bit dei permessi per una
@@ -2511,17 +2521,126 @@ illustrata in fig.~\ref{fig:file_perm_bit}.
   \label{tab:file_dirperm_bits}
 \end{table}
 
-Nelle tabelle si è indicato con ``-'' il fatto che il valore degli altri bit
-non è influente rispetto a quanto indicato in ciascuna riga; l'operazione fa
-riferimento soltanto alla combinazione di bit per i quali il valore è
-riportato esplicitamente.
+Nelle tabelle si è indicato con il carattere ``-'' il fatto che il valore del
+bit in questione non è influente rispetto a quanto indicato nella riga della
+tabella; la descrizione dell'operazione fa riferimento soltanto alla
+combinazione di bit per i quali è stato riportato esplicitamente un valore.
+Si rammenti infine che il valore dei bit dei permessi non ha alcun effetto
+qualora il processo possieda i privilegi di amministratore.
+
+
+
+\section{Caratteristiche e funzionalità avanzate}
+\label{sec:file_dir_advances}
+
+Tratteremo qui alcune caratteristiche e funzionalità avanzate della gestione
+di file e directory, affrontando anche una serie di estensioni
+dell'interfaccia classica dei sistemi unix-like, principalmente utilizzate a
+scopi di sicurezza, che sono state introdotte nelle versioni più recenti di
+Linux.
+
+
+\subsection{Gli attributi estesi}
+\label{sec:file_xattr}
+
+\itindbeg{Extended~Attributes}
+
+Nelle sezioni precedenti abbiamo trattato in dettaglio le varie informazioni
+che il sistema mantiene negli inode, e le varie funzioni che permettono di
+modificarle.  Si sarà notato come in realtà queste informazioni siano
+estremamente ridotte.  Questo è dovuto al fatto che Unix origina negli anni
+'70, quando le risorse di calcolo e di spazio disco erano minime. Con il venir
+meno di queste restrizioni è incominciata ad emergere l'esigenza di poter
+associare ai file delle ulteriori informazioni astratte (quelli che vengono
+chiamati i \textsl{meta-dati}) che però non potevano trovar spazio nei dati
+classici mantenuti negli inode.
+
+Per risolvere questo problema alcuni sistemi unix-like (e fra questi anche
+Linux) hanno introdotto un meccanismo generico che consenta di associare delle
+informazioni ai singoli file,\footnote{l'uso più comune è quello della ACL,
+  che tratteremo nella prossimaa sezione, ma si possono inserire anche altre
+  informazioni.}  detto \textit{Extended Attributes}. Gli \textsl{attributi
+  estesi} non sono altro che delle coppie nome/valore che sono associate
+permanentemente ad un oggetto sul filesystem, analoghi di quello che sono le
+variabili di ambiente (vedi sez.~\ref{sec:proc_environ}) per un processo.
+
+Altri sistemi (come Solaris, MacOS e Windows) hanno adottato un meccanismo
+diverso in cui ad un file sono associati diversi flussi di dati, su cui
+possono essere mantenute ulteriori informazioni, che possono essere accedute
+con le normali operazioni di lettura e scrittura. Questi non vanno confusi con
+gli \textit{Extended Attributes} (anche se su Solaris hanno lo stesso nome),
+che sono un meccanismo molto più semplice, che pur essendo limitato (potendo
+contenere solo una quantità limitata di informazione) hanno il grande
+vantaggio di essere molto più semplici da realizzare e più
+efficienti,\footnote{cosa molto importante, specie per le applicazioni che
+  richiedono una gran numero di accessi, come le ACL.} e di garantire
+l'atomicità di tutte le operazioni.
+
+
+
+
+\itindend{Extended~Attributes}
+
+% TODO trattare gli attributi estesi e le funzioni la documentazione di
+% sistema è nei pacchetti libxattr1-dev e attr
+
+
+\subsection{Le ACL}
+\label{sec:file_ACL}
+
+
+\itindbeg{Access~Control~List}
+
+Il modello classico dei permessi di Unix, per quanto funzionale ed efficiente,
+è comunque piuttosto limitato e per quanto possa aver coperto per lunghi anni
+le esigenze più comuni con un meccanismo semplice e potente, non è in grado di
+rispondere in maniera adeguata a situazioni che richiedono una gestione
+complessa dei permessi di accesso.\footnote{già un requisito come quello di
+  dare accesso in scrittura ad alcune persone ed in sola lettura ad altre non
+  si può soddisfare in maniera soddifacente.}
+
+Per questo motivo erano state progressivamente introdotte nelle varie versioni
+di Unix dei meccanismi di gestione dei permessi dei file più flessibili, nella
+forma delle cosiddette \textit{Access Control List}.  Nello sforzo di
+standardizzare queste funzionalità era stato creato un gruppo di lavoro il cui
+scopo era estendere lo standard POSIX 1003 attraverso due nuovi insiemi di
+specifiche, la POSIX 1003.1e per l'interfaccia di programmazione e la POSIX
+1003.2c per i comandi di shell.
+
+Gli obiettivi erano però forse troppo ambizioni, e nel gennaio del 1998 i
+finanziamenti vennero ritirati senza che si fosse arrivati alla definizione di
+uno standard, dato però che una parte della documentazione prodotta era di
+alta qualità venne deciso di rilasciare al pubblico la diciassettesima bozza
+del documento, quella che va sotto il nome di POSIX 1003.1e Draft 17, che è
+divenuta la base sulla quale si definiscono quelle che vanno sotto il nome di
+\textit{Posix ACL}.
+
+A differenza di altri sistemi (ad esempio FreeBSD) nel caso di Linux si è
+scelto di realizzare le ACL attraverso l'interfaccia degli \textit{Extended
+  Attributes}, e fornire tutte le relative funzioni di gestione tramite una
+liberia, \texttt{libacl} che nasconde i dettagli implementativi delle stesse e
+presenta ai programmi una interfaccia che fa riferimento allo standard POSIX
+1003.1e.
+
+
+
+
+
+\itindend{Access~Control~List}
+
+
+% TODO trattare le ACL,  la documentazione di sistema è nei pacchetti
+% libacl1-dev e acl 
+% vedi anche http://www.suse.de/~agruen/acl/linux-acls/online/
+
 
-% TODO intrudurre nuova sezione sulle funzionalità di sicurezza avanzate, con
-% dentro chroot, gli attributi estesi, ecc.
 
 \subsection{La funzione \func{chroot}}
 \label{sec:file_chroot}
 
+% TODO intrudurre nuova sezione sulle funzionalità di sicurezza avanzate, con
+% dentro chroot SELinux e AppArmor ???
+
 Benché non abbia niente a che fare con permessi, utenti e gruppi, la funzione
 \func{chroot} viene usata spesso per restringere le capacità di accesso di un
 programma ad una sezione limitata del filesystem, per cui ne parleremo in
@@ -2546,8 +2665,8 @@ 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
-\itindsub{pathname}{assoluto}\textit{pathname} assoluti a partire sempre dalla
-stessa directory, che corrisponde alla \file{/} del sistema.
+\itindsub{pathname}{assoluto} \textit{pathname} assoluti a partire sempre
+dalla stessa directory, che corrisponde alla radice 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ò
@@ -2560,7 +2679,7 @@ prototipo 
 \bodydesc{La funzione restituisce zero in caso di successo e -1 per
     un errore, in caso di errore \var{errno} può assumere i valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] L'user-ID effettivo del processo non è zero.
+  \item[\errcode{EPERM}] l'user-ID effettivo del processo non è zero.
   \end{errlist}
   ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
   \errval{ENOMEM}, \errval{ENOTDIR}, \errval{EACCES}, \errval{ELOOP};
@@ -2603,10 +2722,11 @@ contiene i file.  Si tenga presente per
 replicare all'interno della \textit{chroot jail} tutti i file (in genere
 programmi e librerie) di cui il server potrebbe avere bisogno.
 
-%%% Local Variables: 
-%%% 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
@@ -2637,4 +2757,9 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % 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 Di
+% LocalWords:  FTP Di filter reiserfs
+
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: