Qualche indicizzazione e dei TODO sui timer (su indicazioni di Alessio
[gapil.git] / filedir.tex
index 14156497144947ade7ad776d88c5f4f2374f2408..ba1cd6bf7de94f43a72c2c201be9dc5cd619e75a 100644 (file)
@@ -79,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
@@ -256,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} 
@@ -525,7 +525,7 @@ 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
+directory viene creata sono specificati dall'argomento \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
@@ -540,17 +540,17 @@ La funzione che permette la cancellazione di 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}.}
@@ -595,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}
@@ -812,13 +812,13 @@ il nome del relativo campo; nel nostro caso sono definite le macro
     \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}
@@ -1083,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}}
@@ -1134,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},
@@ -1241,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}.}
@@ -1423,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}).}
@@ -1456,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
@@ -1557,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}.}
@@ -1590,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.}
@@ -1643,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$&   
-    con \const{O\_TRUNC} \\    \func{exec}  
-    &$\bullet$& --      & --      & --      & --      & --      & \\
+             &$\bullet$&$\bullet$&$\bullet$& --      &$\bullet$&$\bullet$&  
+             con \const{O\_CREATE} \\
+    \func{creat}  
+             & --      &$\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$&$\bullet$& --      &$\bullet$&$\bullet$& con 
-    \const{O\_CREATE} \\    \func{open}
-    & --      &$\bullet$&$\bullet$& --      & --      & --      & con 
-    \const{O\_TRUNC}  \\    \func{pipe}
-    &$\bullet$&$\bullet$&$\bullet$& --      & --      & --      & \\
+             & --      &$\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$& se esegue 
-    \func{rmdir}\\ \func{rename}
-    & --      & --      &$\bullet$& --      &$\bullet$&$\bullet$& per entrambi
-    gli argomenti\\ \func{rmdir}
-    & --      & --      & --      & --      &$\bullet$&$\bullet$& \\ 
+             & --      & --      &$\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$&\\ 
     \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 
@@ -1865,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 
@@ -2159,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 
@@ -2191,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},
@@ -2213,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
@@ -2384,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
@@ -2551,11 +2558,11 @@ 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 a breve, 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.
+  che tratteremo nella prossima 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
@@ -2569,6 +2576,105 @@ 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.
 
+In Linux gli attributi estesi sono sempre associati al singolo inode e
+l'accesso viene sempre eseguito in forma atomica, in lettura il valore
+corrente viene scritto su un buffer in memoria, mentre la scrittura prevede
+che ogni valore precedente sia sovrascritto.
+
+Si tenga presente che non tutti i filesystem supportano gli \textit{Extended
+  Attributes}, in particolare al momento della scrittura di queste dispense
+essi sono presenti solo su \textsl{ext2}, \textsl{ext3} e \textsl{XFS}.
+Inoltre a seconda della implementazione ci possono essere dei limiti sulla
+quantità di attributi che si possono utilizzare.\footnote{ad esempio nel caso
+  di \textsl{ext2} ed \textsl{ext3} è richiesto che essi siano contenuti
+  all'interno di un singolo blocco (pertanto con dimensioni massime pari a
+  1024, 2048 o 4096 byte a seconda delle dimensioni di quest'ultimo impostate
+  in fase di creazione del filesystem), mentre con \textsl{XFS} non ci sono
+  limiti ed i dati vengono memorizzati in maniera diversa (nell'inode stesso,
+  in un blocco a parte, o in una struttura ad albero dedicata) per mantenerne
+  la scalabilità.} Infine lo spazio utilizzato per mantenere gli attributi
+estesi viene tenuto in conto per il calcolo delle quote di utente e gruppo
+proprietari del file.
+
+Come meccanismo per mantenere informazioni aggiuntive associate al singolo
+file, gli \textit{Extended Attributes} possono avere usi anche molto diversi
+fra loro.  Per poterli distinguere allora sono stati suddivisi in
+\textsl{classi}, a cui poter applicare requisiti diversi per l'accesso e la
+gestione. Per questo motivo il nome di un attributo deve essere sempre
+specificato nella forma \texttt{namespace.attribute}, dove \texttt{namespace}
+fa riferimento alla classe a cui l'attributo appartiene, mentre
+\texttt{attribute} è il nome ad esso assegnato. In tale forma il nome di un
+attributo esteso deve essere univoco. Al momento della scrittura di queste
+dispense sono state definite le quattro classi di attributi riportate in
+tab.~\ref{tab:extended_attribute_class}.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|c|p{10cm}|}
+    \hline
+    \textbf{Nome} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{security}& Gli \textit{extended security attributes}: vengono
+                      utilizzati dalle estensioni di sicurezza del kernel (i
+                      \itindex{Linux~Security~Modules} \textit{Linux 
+                        Security Modules}), per le realizzazione di meccanismi
+                      evoluti di controllo di accesso come \index{SELinux}
+                      SELinux.\\ 
+    \const{system}  & Gli \textit{extended security attributes}: sono usati
+                      dal kernel per memorizzare dati di sistema associati ai
+                      file come le \itindex{Access~Control~List} ACL (vedi
+                      sez.~\ref{sec:file_ACL}) o le \itindex{capabilities}
+                      \textit{capabilities} (vedi
+                      sez.~\ref{sec:proc_capabilities}).\\
+    \const{trusted} & I \textit{irusted extended attributes}: visibili ed
+                      accessibili soltanto a processi privilegiati.
+                      Vengono utilizzati per poter realizzare in user space
+                      meccanismi che consentano di mantenere delle
+                      informazioni sui file che non siano accessibili ai
+                      processi ordinari.\\
+    \const{user}    & Gli \textit{extended user attributes}: utilizzati per
+                      mantenere informazioni aggiuntive sui file (come il
+                      \textit{mime-type}, la codifica dei caratteri o del
+                      file) accessibili dagli utenti.\\
+    \hline
+  \end{tabular}
+  \caption{I nomi utilizzati valore di \texttt{namespace} per distinguere le
+    varie classi di \textit{Extended Attributes}.}
+  \label{tab:extended_attribute_class}
+\end{table}
+
+
+Come accennato gli \textit{Extended Attributes} vengono utilizzati in forme
+diverse ed in particolare anche per la realizzazione di estensioni del
+meccanismo tradizionale dei controlli di accesso. Per questo motivo l'accesso
+agli attributi estesi è revolato in maniera diversa a seconda della loro
+classe; in particolare si hanno i seguenti casi:
+\begin{basedescript}{\desclabelwidth{2.0cm}\desclabelstyle{\nextlinelabel}}
+\item[\texttt{security}] l'accesso agli \textit{extended security attributes}
+  dipende dalle politiche di sicurezza stabilite da loro stessi tramite
+  l'utilizzo di un sistema di controllo basato sui
+  \itindex{Linux~Security~Modules} \textit{Linux Security Modules} (ad esempio
+  \index{SELinux} SELinux). Pertanto l'accesso in lettura o scruttura dipende
+  dalle politiche di sicurezza implementate all'interno dal modulo di
+  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
+  dotati della \index{capabilities} \textit{capability}
+  \const{CAP\_SYS\_ADMIN}.
+\item[\texttt{system}] \textit{extended system attributes}
+\item[\texttt{trusted}] \textit{trusted extended attributes}
+\item[\texttt{user}] \textit{extended user attributes}
+\end{basedescript}
+
+
+ è regolato dagli ordinari permessi dei file: occorre il
+permesso di lettura per leggerli e quello di scrittura per scriverli o
+modificarli; il permesso di esecuzione viene invece interpretato coma la
+capacità di ottenere la lista degli attributi presenti.
+
 
 
 
@@ -2578,7 +2684,7 @@ l'atomicit
 % sistema è nei pacchetti libxattr1-dev e attr
 
 
-\subsection{Le ACL}
+\subsection{Le \textit{Access  Control List}}
 \label{sec:file_ACL}
 
 
@@ -2590,30 +2696,35 @@ le esigenze pi
 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.}
+  si può soddisfare in maniera soddisfacente.}
 
 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.
+forma delle cosiddette \textit{Access Control List} (indicate usualmente con
+la sigla ACL).  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}.
+del documento, quella che va sotto il nome di \textit{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.
+scelto di realizzare le ACL attraverso l'uso degli
+\itindex{Extended~Attributes} \textit{Extended Attributes} (appena trattati in
+sez.~\ref{sec:file_xattr}), e fornire tutte le relative funzioni di gestione
+tramite una libreria, \texttt{libacl} che nasconde i dettagli implementativi
+delle ACL e presenta ai programmi una interfaccia che fa riferimento allo
+standard POSIX 1003.1e.
+
+
+
+
 
 \itindend{Access~Control~List}
 
@@ -2654,8 +2765,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ò
@@ -2668,7 +2779,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};
@@ -2711,6 +2822,12 @@ 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.
 
+
+
+
+
+
+
 % 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
@@ -2740,7 +2857,8 @@ 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 filter reiserfs
+% LocalWords:  FTP Di filter reiserfs Attributes Solaris Posix FreeBSD libacl
+% LocalWords:  XFS SELinux namespace attribute security trusted Draft
 
 %%% Local Variables: 
 %%% mode: latex