Rifinitura degli indici, correzioni ortografiche varie.
[gapil.git] / filedir.tex
index 1e99a2842772d3abc973a0bd5c3696b495efe8f5..3c564a619bbc2d18a06c29aaac54e19ca856888e 100644 (file)
@@ -56,14 +56,15 @@ riferimento al suddetto inode.
 
 Questo significa che la realizzazione di un link è immediata in quanto uno
 stesso file può avere tanti nomi diversi allo stesso tempo, dati da
-altrettante diverse associazioni allo stesso inode; si noti poi che nessuno di
-questi nomi viene ad assumere una particolare preferenza o originalità
-rispetto agli altri.
-
-Per aggiungere un nome ad un inode si utilizza la funzione \func{link}; si
-suole chiamare questo tipo di associazione un collegamento diretto (o
-\textit{hard link}).  Il prototipo della funzione e le sue caratteristiche
-principali, come risultano dalla pagina di manuale, sono le seguenti:
+altrettante diverse associazioni allo stesso inode\index{inode}; si noti poi
+che nessuno di questi nomi viene ad assumere una particolare preferenza o
+originalità rispetto agli altri.
+
+Per aggiungere un nome ad un inode\index{inode} si utilizza la funzione
+\func{link}; si suole chiamare questo tipo di associazione un collegamento
+diretto (o \textit{hard link}).  Il prototipo della funzione e le sue
+caratteristiche principali, come risultano dalla pagina di manuale, sono le
+seguenti:
 \begin{prototype}{unistd.h}
 {int link(const char *oldpath, const char *newpath)}
   Crea un nuovo collegamento diretto al file indicato da \var{oldpath}
@@ -83,9 +84,9 @@ principali, come risultano dalla pagina di manuale, sono le seguenti:
     numero massimo è specificato dalla variabile \const{LINK\_MAX}, vedi
     \secref{sec:sys_limits}).
   \end{errlist}
-  ed inoltre \const{EACCES}, \const{ENAMETOOLONG}, \const{ENOTDIR},
-  \const{EFAULT}, \const{ENOMEM}, \const{EROFS}, \const{ELOOP},
-  \const{ENOSPC}, \const{EIO}.}
+  ed inoltre \errval{EACCES}, \errval{ENAMETOOLONG}, \errval{ENOTDIR},
+  \errval{EFAULT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP},
+  \errval{ENOSPC}, \errval{EIO}.}
 \end{prototype}
 
 La creazione di un nuovo collegamento diretto non copia il contenuto del file,
@@ -122,10 +123,11 @@ all'interno di una directory) si effettua con la funzione \func{unlink}; il
 suo prototipo è il seguente:
 \begin{prototype}{unistd.h}{int unlink(const char *pathname)}
   Cancella il nome specificato dal pathname nella relativa directory e
-  decrementa il numero di riferimenti nel relativo inode. Nel caso di link
-  simbolico cancella il link simbolico; nel caso di socket, fifo o file di
-  dispositivo rimuove il nome, ma come per i file i processi che hanno aperto
-  uno di questi oggetti possono continuare ad utilizzarlo.
+  decrementa il numero di riferimenti nel relativo inode\index{inode}. Nel
+  caso di link simbolico cancella il link simbolico; nel caso di
+  socket\index{socket}, fifo o file di dispositivo\index{file!di dispositivo}
+  rimuove il nome, ma come per i file i processi che hanno aperto uno di
+  questi oggetti possono continuare ad utilizzarlo.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
     errore, nel qual caso il file non viene toccato. La variabile
@@ -140,8 +142,9 @@ suo prototipo 
   lettura.
   \item[\errcode{EISDIR}] \var{pathname} fa riferimento a una directory.
   \end{errlist}
-  ed inoltre: \const{EACCES}, \const{EFAULT}, \const{ENOENT}, \const{ENOTDIR},
-  \const{ENOMEM}, \const{EROFS}, \const{ELOOP}, \const{EIO}.}
+  ed inoltre: \errval{EACCES}, \errval{EFAULT}, \errval{ENOENT},
+  \errval{ENOTDIR}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP},
+  \errval{EIO}.}
 \end{prototype}
 
 Per cancellare una voce in una directory è necessario avere il permesso di
@@ -152,18 +155,18 @@ se inoltre lo \textit{sticky} bit 
 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
-nell'inode devono essere effettuati in maniera atomica (si veda
+Una delle caratteristiche di queste funzioni è che la creazione/rimozione del
+nome dalla directory e l'incremento/decremento del numero di riferimenti
+nell'inode\index{inode} devono essere effettuati in maniera atomica (si veda
 \secref{sec:proc_atom_oper}) senza possibili interruzioni fra le due
 operazioni. Per questo entrambe queste funzioni sono realizzate tramite una
 singola system call.
 
 Si ricordi infine che il file non viene eliminato dal disco fintanto che tutti
 i riferimenti ad esso sono stati cancellati: solo quando il \textit{link
-  count} mantenuto nell'inode diventa zero lo spazio occupato viene rimosso. A
-questo però si aggiunge un'altra condizione, e cioè che non ci siano processi
-che abbiano detto file aperto.  
+  count} mantenuto nell'inode\index{inode} diventa zero lo spazio occupato
+viene rimosso. A questo però si aggiunge un'altra condizione, e cioè che non
+ci siano processi che abbiano detto 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
@@ -210,8 +213,8 @@ nello stesso filesystem) si usa invece la funzione \func{rename},\footnote{la
     errore, nel qual caso il file non viene toccato. La variabile
     \var{errno} viene impostata secondo i seguenti codici di errore:
   \begin{errlist} 
-  \item[\errcode{EISDIR}] \var{newpath} è una directory mentre \var{oldpath} non
-    è una directory.
+  \item[\errcode{EISDIR}] \var{newpath} è una directory mentre \var{oldpath}
+    non è una directory.
   \item[\errcode{EXDEV}] \var{oldpath} e \var{newpath} non sono sullo stesso
     filesystem.
   \item[\errcode{ENOTEMPTY}] \var{newpath} è una directory già esistente e non
@@ -226,8 +229,9 @@ nello stesso filesystem) si usa invece la funzione \func{rename},\footnote{la
     o \var{oldpath} è una directory e \var{newpath} esiste e non è una
     directory.
   \end{errlist} 
-  ed inoltre \const{EACCESS}, \const{EPERM}, \const{EMLINK}, \const{ENOENT},
-  \const{ENOMEM}, \const{EROFS}, \const{ELOOP} e \const{ENOSPC}.}
+  ed inoltre \errval{EACCES}, \errval{EPERM}, \errval{EMLINK},
+  \errval{ENOENT}, \errval{ENOMEM}, \errval{EROFS}, \errval{ELOOP} e
+  \errval{ENOSPC}.}
 \end{prototype}
 
 Il comportamento della funzione è diverso a seconda che si voglia rinominare
@@ -268,8 +272,8 @@ riferimento allo stesso file.
 \label{sec:file_symlink}
 
 Come abbiamo visto in \secref{sec:file_link} la funzione \func{link} crea
-riferimenti agli inodes, pertanto può funzionare soltanto per file che
-risiedono sullo stesso filesystem e solo per un filesystem di tipo Unix.
+riferimenti agli inode\index{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.
 
@@ -303,9 +307,9 @@ specificato. La funzione che permette di creare un nuovo link simbolico 
   \item[\errcode{EROFS}] \param{newpath} è su un filesystem montato in sola
     lettura.
   \end{errlist}
-  ed inoltre \const{EFAULT}, \const{EACCES}, \const{ENAMETOOLONG},
-  \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP}, \const{ENOSPC} e
-  \const{EIO}.}
+  ed inoltre \errval{EFAULT}, \errval{EACCES}, \errval{ENAMETOOLONG},
+  \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{ENOSPC} e
+  \errval{EIO}.}
 \end{prototype}
 
 Si tenga presente che la funzione non effettua nessun controllo sull'esistenza
@@ -378,9 +382,9 @@ la funzione \func{readlink}, il cui prototipo 
   \item[\errcode{EINVAL}] \param{path} non è un link simbolico o \param{size}
     non è positiva.
   \end{errlist}
-  ed inoltre \const{ENOTDIR}, \const{ENAMETOOLONG}, \const{ENOENT},
-  \const{EACCES}, \const{ELOOP}, \const{EIO}, \const{EFAULT} e
-  \const{ENOMEM}.}
+  ed inoltre \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+  \errval{EACCES}, \errval{ELOOP}, \errval{EIO}, \errval{EFAULT} e
+  \errval{ENOMEM}.}
 \end{prototype}
 
 La funzione apre il link simbolico, ne legge il contenuto, lo scrive nel
@@ -454,21 +458,23 @@ accedere ai tipi usati da queste funzioni si deve includere il file
   \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 già. 
-  \item[\errcode{EACCESS}] 
+  \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 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{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
     la nuova directory o si è esaurita la quota disco dell'utente.
   \end{errlist}
-  ed inoltre anche \const{EPERM}, \const{EFAULT}, \const{ENAMETOOLONG},
-  \const{ENOENT}, \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP},
-  \const{EROFS}.}
+  ed inoltre anche \errval{EPERM}, \errval{EFAULT}, \errval{ENAMETOOLONG},
+  \errval{ENOENT}, \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP},
+  \errval{EROFS}.}
 \end{prototype}
 
 La funzione crea una nuova directory vuota (che contiene solo le due voci
@@ -493,25 +499,25 @@ suo prototipo 
     directory, oppure la directory che contiene \var{dirname} ha lo sticky bit
     impostato e l'userid effettivo del processo non corrisponde al
     proprietario della directory.
-  \item[\errcode{EACCESS}] 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
+  \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
     \var{dirname}.
   \item[\errcode{EBUSY}] La directory specificata è la directory di lavoro o la
     radice di qualche processo.
   \item[\errcode{ENOTEMPTY}] La directory non è vuota.
   \end{errlist}
-  ed inoltre anche \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
-  \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP}, \const{EROFS}.}
+  ed inoltre anche \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+  \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP}, \errval{EROFS}.}
 \end{prototype}
 
 La modalità con cui avviene la cancellazione è analoga a quella di
-\func{unlink}: fintanto che il numero di link all'inode della 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 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.
+\func{unlink}: fintanto che il numero di link all'inode\index{inode} della
+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 all'inode\index{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.
 
 
 \subsection{La creazione di file speciali}
@@ -519,8 +525,10 @@ nuovi file nella directory.
 
 Finora abbiamo parlato esclusivamente di file, directory e link simbolici; in
 \secref{sec:file_file_types} abbiamo visto però che il sistema prevede pure
-degli altri tipi di file speciali, come i file di dispositivo e le fifo (i
-socket sono un caso a parte, che vedremo in \capref{cha:socket_intro}).
+degli altri tipi di file speciali, come i file di dispositivo 
+\index{file!di dispositivo} 
+e le fifo (i socket\index{socket} sono un caso a parte, che
+vedremo in \capref{cha:socket_intro}).
 
 La manipolazione delle caratteristiche di questi file e la loro cancellazione
 può essere effettuata con le stesse funzioni che operano sui file regolari; ma
@@ -544,9 +552,9 @@ di queste funzioni 
     o un dipositivo.
   \item[\errcode{EEXIST}] \param{pathname} esiste già o è un link simbolico.
   \end{errlist}
-  ed inoltre anche \const{EFAULT}, \const{EACCESS}, \const{ENAMETOOLONG},
-  \const{ENOENT}, \const{ENOTDIR}, \const{ENOMEM}, \const{ELOOP},
-  \const{ENOSPC}, \const{EROFS}.}
+  ed inoltre anche \errval{EFAULT}, \errval{EACCES}, \errval{ENAMETOOLONG},
+  \errval{ENOENT}, \errval{ENOTDIR}, \errval{ENOMEM}, \errval{ELOOP},
+  \errval{ENOSPC}, \errval{EROFS}.}
 \end{functions}
 
 La funzione permette di creare un file speciale, ma si può usare anche per
@@ -569,11 +577,11 @@ usando questa funzione; ma in Linux\footnote{la funzione non 
   codici di errore.} l'uso per la creazione di una fifo è consentito anche
 agli utenti normali.
 
-I nuovi inode creati con \func{mknod} apparterranno al proprietario e al
-gruppo del processo che li ha creati, a meno che non si sia attivato il bit
-\acr{sgid} per la directory o sia stata attivata la semantica BSD per il
-filesystem (si veda \secref{sec:file_ownership}) in cui si va a creare
-l'inode.
+I nuovi inode\index{inode} creati con \func{mknod} apparterranno al
+proprietario e al gruppo del processo che li ha creati, a meno che non si sia
+attivato il bit \acr{sgid} per la directory o sia stata attivata la semantica
+BSD per il filesystem (si veda \secref{sec:file_ownership}) in cui si va a
+creare l'inode\index{inode}.
 
 Per creare una fifo (un file speciale, su cui torneremo in dettaglio in
 \secref{sec:ipc_named_pipe}) lo standard POSIX specifica l'uso della funzione
@@ -584,9 +592,9 @@ Per creare una fifo (un file speciale, su cui torneremo in dettaglio in
   \funcdecl{int mkfifo(const char *pathname, mode\_t mode)} Crea una fifo.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, nel qual caso \var{errno} assumerà i valori \const{EACCESS},
-    \const{EEXIST}, \const{ENAMETOOLONG}, \const{ENOENT}, \const{ENOSPC},
-    \const{ENOTDIR} e \const{EROFS}.}
+    errore, nel qual caso \var{errno} assumerà i valori \errval{EACCES},
+    \errval{EEXIST}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOSPC},
+    \errval{ENOTDIR} e \errval{EROFS}.}
 \end{functions}
 \noindent come per \func{mknod} il file \param{pathname} non deve esistere
 (neanche come link simbolico); al solito i permessi specificati da
@@ -631,9 +639,9 @@ resta la stessa quando viene creato un processo figlio (vedi
 \secref{sec:proc_fork}), la directory corrente della shell diventa anche la
 directory corrente di qualunque comando da essa lanciato.
 
-In genere il kernel tiene traccia per ciascun processo dell'inode della
-directory di lavoro corrente, per ottenere il pathname occorre usare una
-apposita funzione di libreria,  \func{getcwd}, il cui prototipo è:
+In genere il kernel tiene traccia per ciascun processo dell'inode\index{inode}
+della directory di lavoro corrente, per ottenere il pathname occorre usare una
+apposita funzione di libreria, \func{getcwd}, il cui prototipo è:
 \begin{prototype}{unistd.h}{char *getcwd(char *buffer, size\_t size)}
   Restituisce il filename completo della directory di lavoro corrente nella
   stringa puntata da \var{buffer}, che deve essere precedentemente
@@ -647,7 +655,7 @@ apposita funzione di libreria,  \func{getcwd}, il cui prototipo 
     è nullo.
   \item[\errcode{ERANGE}] L'argomento \var{size} è più piccolo della
     lunghezza del pathname. 
-  \item[\errcode{EACCESS}] 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 pathname (cioè su una delle directory superiori alla
     corrente).
   \end{errlist}}
@@ -690,11 +698,11 @@ appunto per \textit{change directory}, il suo prototipo 
     nel qual caso \var{errno} assumerà i valori:
   \begin{errlist}
   \item[\errcode{ENOTDIR}] Non si è specificata una directory.
-  \item[\errcode{EACCESS}] Manca il permesso di ricerca su uno dei componenti di
-    \param{path}.
+  \item[\errcode{EACCES}] Manca il permesso di ricerca su uno dei componenti
+    di \param{path}.
   \end{errlist}
-  ed inoltre \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
-  \const{ENOMEM}, \const{ELOOP} e \const{EIO}.}
+  ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+  \errval{ENOMEM}, \errval{ELOOP} e \errval{EIO}.}
 \end{prototype}
 \noindent ed ovviamente \param{pathname} deve indicare una directory per la
 quale si hanno i permessi di accesso.
@@ -707,12 +715,12 @@ usa \func{fchdir}, il cui prototipo 
   pathname.
   
   \bodydesc{La funzione restituisce zero in caso di successo e -1 per un
-    errore, in caso di errore \var{errno} assumerà i valori \const{EBADF} o
-    \const{EACCES}.}
+    errore, in caso di errore \var{errno} assumerà i valori \errval{EBADF} o
+    \errval{EACCES}.}
 \end{prototype}
 \noindent anche in questo caso \param{fd} deve essere un file descriptor
 valido che fa riferimento ad una directory. Inoltre l'unico errore di accesso
-possibile (tutti gli altri sarebbero occorsi all'apertura di \func{fd}), è
+possibile (tutti gli altri sarebbero occorsi all'apertura di \param{fd}), è
 quello in cui il processo non ha il permesso di accesso alla directory
 specificata da \param{fd}.
 
@@ -757,7 +765,7 @@ esplicitamente, il suo prototipo 
 
   \bodydesc{La funzione ritorna il puntatore alla stringa con il nome o
   \val{NULL} in caso di fallimento, \var{errno} viene impostata a
-  \const{ENOMEM} qualora fallisca l'allocazione della stringa.}
+  \errval{ENOMEM} qualora fallisca l'allocazione della stringa.}
 \end{prototype}
 
 La funzione alloca con \code{malloc} la stringa in cui restituisce il nome,
@@ -796,8 +804,8 @@ POSIX definisce la funzione \func{tempfile}, il cui prototipo 
     \item[\errcode{EINTR}] La funzione è stata interrotta da un segnale.
     \item[\errcode{EEXIST}] Non è stato possibile generare un nome univoco.
     \end{errlist}
-    ed inoltre \const{EFAULT}, \const{EMFILE}, \const{ENFILE}, \const{ENOSPC},
-    \const{EROFS} e \const{EACCESS}.}
+    ed inoltre \errval{EFAULT}, \errval{EMFILE}, \errval{ENFILE},
+    \errval{ENOSPC}, \errval{EROFS} e \errval{EACCES}.}
 \end{prototype}
 \noindent essa restituisce direttamente uno stream già aperto (in modalità
 \code{r+b}, si veda \secref{sec:file_fopen}) e pronto per l'uso, che viene
@@ -885,15 +893,16 @@ directory 
 \section{La manipolazione delle caratteristiche dei files}
 \label{sec:file_infos}
 
-Come spiegato in \secref{sec:file_filesystem} tutte le informazioni
-generali relative alle caratteristiche di ciascun file, a partire dalle
-informazioni relative al controllo di accesso, sono mantenute nell'inode.
+Come spiegato in \secref{sec:file_filesystem} tutte le informazioni generali
+relative alle caratteristiche di ciascun file, a partire dalle informazioni
+relative al controllo di accesso, sono mantenute nell'inode\index{inode}.
 
 Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
 usando la funzione \func{stat}, che permette l'accesso a tutti i dati
-memorizzati nell'inode; esamineremo poi le varie funzioni usate per manipolare
-tutte queste informazioni (eccetto quelle che riguardano la gestione del
-controllo di accesso, trattate in in \secref{sec:file_access_control}).
+memorizzati nell'inode\index{inode}; esamineremo poi le varie funzioni usate
+per manipolare tutte queste informazioni (eccetto quelle che riguardano la
+gestione del controllo di accesso, trattate in in
+\secref{sec:file_access_control}).
 
 
 \subsection{Le funzioni \func{stat}, \func{fstat} e \func{lstat}}
@@ -921,9 +930,9 @@ queste funzioni sono i seguenti:
   descriptor \var{filedes}.
   
   \bodydesc{Le funzioni restituiscono 0 in caso di successo e -1 per un
-    errore, nel qual caso \var{errno} assumerà uno dei valori: \const{EBADF},
-    \const{ENOENT}, \const{ENOTDIR}, \const{ELOOP}, \const{EFAULT},
-    \const{EACCESS}, \const{ENOMEM}, \const{ENAMETOOLONG}.}
+    errore, nel qual caso \var{errno} assumerà uno dei valori: \errval{EBADF},
+    \errval{ENOENT}, \errval{ENOTDIR}, \errval{ELOOP}, \errval{EFAULT},
+    \errval{EACCES}, \errval{ENOMEM}, \errval{ENAMETOOLONG}.}
 \end{functions}
 \noindent il loro comportamento è identico, solo che operano rispettivamente
 su un file, su un link simbolico e su un file descriptor.
@@ -979,9 +988,9 @@ di file 
 Dato che il valore numerico può variare a seconda delle implementazioni, lo
 standard POSIX definisce un insieme di macro per verificare il tipo di file,
 queste vengono usate anche da Linux che supporta pure le estensioni allo
-standard per i link simbolici e i socket definite da BSD; l'elenco completo
-delle macro con cui è possibile estrarre l'informazione da \var{st\_mode} è
-riportato in \tabref{tab:file_type_macro}.
+standard per i link simbolici e i socket\index{socket} definite da BSD;
+l'elenco completo delle macro con cui è possibile estrarre l'informazione da
+\var{st\_mode} è riportato in \tabref{tab:file_type_macro}.
 \begin{table}[htb]
   \centering
   \footnotesize
@@ -992,11 +1001,11 @@ riportato in \tabref{tab:file_type_macro}.
     \hline
     \macro{S\_ISREG(m)}  & file regolare \\
     \macro{S\_ISDIR(m)}  & directory \\
-    \macro{S\_ISCHR(m)}  & device a caratteri \\
-    \macro{S\_ISBLK(m)}  & device a blocchi\\
+    \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\_ISSOCK(m)} & socket\index{socket} \\
     \hline    
   \end{tabular}
   \caption{Macro per i tipi di file (definite in \texttt{sys/stat.h}).}
@@ -1024,12 +1033,12 @@ un'opportuna combinazione.
     \hline
     \hline
     \const{S\_IFMT}   &  0170000 & bitmask per i bit del tipo di file \\
-    \const{S\_IFSOCK} &  0140000 & socket             \\
+    \const{S\_IFSOCK} &  0140000 & socket\index{socket}             \\
     \const{S\_IFLNK}  &  0120000 & link simbolico     \\
     \const{S\_IFREG}  &  0100000 & file regolare      \\ 
-    \const{S\_IFBLK}  &  0060000 & device a blocchi   \\
+    \const{S\_IFBLK}  &  0060000 & dispositivo a blocchi   \\
     \const{S\_IFDIR}  &  0040000 & directory          \\ 
-    \const{S\_IFCHR}  &  0020000 & device a caratteri \\
+    \const{S\_IFCHR}  &  0020000 & dispositivo a caratteri \\
     \const{S\_IFIFO}  &  0010000 & fifo               \\
     \hline
     \const{S\_ISUID}  &  0004000 & set UID bit   \\
@@ -1117,8 +1126,8 @@ dimensione si possono usare le due funzioni \func{truncate} e
     \func{ftruncate} si hanno i valori:
   \begin{errlist}
   \item[\errcode{EBADF}] \var{fd}  non è un file descriptor.
-  \item[\errcode{EINVAL}] \var{fd} è un riferimento ad un socket, non a un file
-    o non è aperto in scrittura.
+  \item[\errcode{EINVAL}] \var{fd} è un riferimento ad un
+    socket\index{socket}, non a un file o non è aperto in scrittura.
   \end{errlist}
   per \func{truncate} si hanno:
   \begin{errlist}
@@ -1126,8 +1135,8 @@ dimensione si possono usare le due funzioni \func{truncate} e
     permesso di esecuzione una delle directory del pathname. 
   \item[\errcode{ETXTBSY}] Il file è un programma in esecuzione.
   \end{errlist}
-  ed anche \const{ENOTDIR}, \const{ENAMETOOLONG}, \const{ENOENT},
-  \const{EROFS}, \const{EIO}, \const{EFAULT}, \const{ELOOP}.}
+  ed anche \errval{ENOTDIR}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+  \errval{EROFS}, \errval{EIO}, \errval{EFAULT}, \errval{ELOOP}.}
 \end{functions}
 
 Se il file è più lungo della lunghezza specificata i dati in eccesso saranno
@@ -1141,10 +1150,10 @@ zeri (e in genere si ha la creazione di un \textit{hole} nel file).
 \label{sec:file_file_times}
 
 Il sistema mantiene per ciascun file tre tempi. Questi sono registrati
-nell'inode insieme agli altri attributi del file e possono essere letti
-tramite la funzione \func{stat}, che li restituisce attraverso tre campi della
-struttura \var{stat} di \figref{fig:file_stat_struct}. Il significato di detti
-tempi e dei relativi campi è riportato nello schema in
+nell'inode\index{inode} insieme agli altri attributi del file e possono essere
+letti tramite la funzione \func{stat}, che li restituisce attraverso tre campi
+della struttura \var{stat} di \figref{fig:file_stat_struct}. Il significato di
+detti tempi e dei relativi campi è riportato nello schema in
 \tabref{tab:file_file_times}, dove è anche riportato un esempio delle funzioni
 che effettuano cambiamenti su di essi.
 
@@ -1173,16 +1182,16 @@ Il primo punto da tenere presente 
 modifica (il \textit{modification time} \var{st\_mtime}) e il tempo di
 cambiamento di stato (il \textit{change time} \var{st\_ctime}). Il primo
 infatti fa riferimento ad una modifica del contenuto di un file, mentre il
-secondo ad una modifica dell'inode; siccome esistono molte operazioni (come la
-funzione \func{link} e molte altre che vedremo in seguito) che modificano solo
-le informazioni contenute nell'inode senza toccare il file, diventa necessario
-l'utilizzo di un altro tempo.
+secondo ad una modifica dell'inode\index{inode}; siccome esistono molte
+operazioni (come la funzione \func{link} e molte altre che vedremo in seguito)
+che modificano solo le informazioni contenute nell'inode\index{inode} senza
+toccare il file, diventa necessario l'utilizzo di un altro tempo.
 
-Il sistema non tiene conto dell'ultimo accesso all'inode, pertanto funzioni
-come \func{access} o \func{stat} non hanno alcuna influenza sui tre tempi. Il
-tempo di ultimo accesso (ai dati) viene di solito usato per cancellare i file
-che non servono più dopo un certo lasso di tempo (ad esempio \cmd{leafnode}
-cancella i vecchi articoli sulla base di questo tempo).
+Il sistema non tiene conto dell'ultimo accesso all'inode\index{inode},
+pertanto funzioni come \func{access} o \func{stat} non hanno alcuna influenza
+sui tre tempi. Il tempo di ultimo accesso (ai dati) viene di solito usato per
+cancellare i file che non servono più dopo un certo lasso di tempo (ad esempio
+\cmd{leafnode} cancella i vecchi articoli sulla base di questo tempo).
 
 Il tempo di ultima modifica invece viene usato da \cmd{make} per decidere
 quali file necessitano di essere ricompilati o (talvolta insieme anche al
@@ -1293,14 +1302,14 @@ funzione \func{utime}, il cui prototipo 
 \begin{prototype}{utime.h}
 {int utime(const char *filename, struct utimbuf *times)} 
 
-Cambia i tempi di ultimo accesso e modifica dell'inode specificato da
-\param{filename} secondo i campi \var{actime} e \var{modtime} di
-\param{times}. Se questa è \val{NULL} allora viene usato il tempo corrente.
+Cambia i tempi di ultimo accesso e modifica dell'inode\index{inode}
+specificato da \param{filename} secondo i campi \var{actime} e \var{modtime}
+di \param{times}. Se questa è \val{NULL} allora viene usato il tempo corrente.
 
 \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
   errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EACCESS}] non si ha il permesso di scrittura sul file.
+  \item[\errcode{EACCES}] non si ha il permesso di scrittura sul file.
   \item[\errcode{ENOENT}] \param{filename} non esiste.
   \end{errlist}}
 \end{prototype}
@@ -1333,12 +1342,13 @@ del file (o si hanno i privilegi di amministratore).
 
 Si tenga presente che non è comunque possibile specificare il tempo di
 cambiamento di stato del file, che viene comunque cambiato dal kernel tutte le
-volte che si modifica l'inode (quindi anche alla chiamata di \func{utime}).
-Questo serve anche come misura di sicurezza per evitare che si possa
-modificare un file nascondendo completamente le proprie tracce.  In realtà la
-cosa resta possibile, se si è in grado di accedere al file di dispositivo,
-scrivendo direttamente sul disco senza passare attraverso il filesystem, ma
-ovviamente in questo modo la cosa è molto più complicata da realizzare.
+volte che si modifica l'inode\index{inode} (quindi anche alla chiamata di
+\func{utime}).  Questo serve anche come misura di sicurezza per evitare che si
+possa modificare un file nascondendo completamente le proprie tracce.  In
+realtà la cosa resta possibile, se si è in grado di accedere al file di
+dispositivo, scrivendo direttamente sul disco senza passare attraverso il
+filesystem, ma ovviamente in questo modo la cosa è molto più complicata da
+realizzare.
 
 
 
@@ -1413,9 +1423,9 @@ allocazione dei bit 
 \end{figure}
 
 Anche i permessi, come tutte le altre informazioni pertinenti al file, sono
-memorizzati nell'inode; in particolare essi sono contenuti in alcuni bit del
-campo \var{st\_mode} della struttura \func{stat} (si veda di nuovo
-\figref{fig:file_stat_struct}).
+memorizzati nell'inode\index{inode}; in particolare essi sono contenuti in
+alcuni bit del campo \var{st\_mode} della struttura \func{stat} (si veda di
+nuovo \figref{fig:file_stat_struct}).
 
 In genere ci si riferisce ai tre livelli dei privilegi usando le lettere
 \cmd{u} (per \textit{user}), \cmd{g} (per \textit{group}) e \cmd{o} (per
@@ -1725,8 +1735,8 @@ da \param{pathname}.
   \item[\errcode{EROFS}] si è richiesto l'accesso in scrittura per un file su
     un filesystem montato in sola lettura.
   \end{errlist}
-  ed inoltre \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
-  \const{ENOTDIR}, \const{ELOOP}, \const{EIO}.}
+  ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+  \errval{ENOTDIR}, \errval{ELOOP}, \errval{EIO}.}
 \end{prototype}
 
 I valori possibili per l'argomento \param{mode} sono esprimibili come
@@ -1792,9 +1802,9 @@ filename e su un file descriptor, i loro prototipi sono:
     proprietario del file o non è zero.
     \item[\errcode{EROFS}] Il file è su un filesystem in sola lettura.
   \end{errlist}
-  ed inoltre \const{EIO}; \func{chmod} restituisce anche \const{EFAULT},
-  \const{ENAMETOOLONG}, \const{ENOENT}, \const{ENOMEM}, \const{ENOTDIR},
-  \const{EACCES}, \const{ELOOP}; \func{fchmod} anche \const{EBADF}.}
+  ed inoltre \errval{EIO}; \func{chmod} restituisce anche \errval{EFAULT},
+  \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR},
+  \errval{EACCES}, \errval{ELOOP}; \func{fchmod} anche \errval{EBADF}.}
 \end{functions}
 
 Entrambe le funzioni utilizzano come secondo argomento \param{mode}, una
@@ -1945,10 +1955,10 @@ sono tre e i loro prototipi sono i seguenti:
   \item[\errcode{EPERM}] L'userid 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 \const{EROFS} e
-  \const{EIO}; \func{chown} restituisce anche \const{EFAULT},
-  \const{ENAMETOOLONG}, \const{ENOENT}, \const{ENOMEM}, \const{ENOTDIR},
-  \const{EACCES}, \const{ELOOP}; \func{fchown} anche \const{EBADF}.}
+  Oltre a questi entrambe restituiscono gli errori \errval{EROFS} e
+  \errval{EIO}; \func{chown} restituisce anche \errval{EFAULT},
+  \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOMEM}, \errval{ENOTDIR},
+  \errval{EACCES}, \errval{ELOOP}; \func{fchown} anche \errval{EBADF}.}
 \end{functions}
 
 In Linux soltanto l'amministratore può cambiare il proprietario di un file,
@@ -2106,9 +2116,9 @@ radice con la funzione \func{chroot}, il cui prototipo 
   \begin{errlist}
   \item[\errcode{EPERM}] L'userid effettivo del processo non è zero.
   \end{errlist}
-  ed inoltre \const{EFAULT}, \const{ENAMETOOLONG}, \const{ENOENT},
-  \const{ENOMEM}, \const{ENOTDIR}, \const{EACCES}, \const{ELOOP};
-  \const{EROFS} e \const{EIO}.}
+  ed inoltre \errval{EFAULT}, \errval{ENAMETOOLONG}, \errval{ENOENT},
+  \errval{ENOMEM}, \errval{ENOTDIR}, \errval{EACCES}, \errval{ELOOP};
+  \errval{EROFS} e \errval{EIO}.}
 \end{prototype}
 \noindent in questo modo la directory radice del processo diventerà
 \param{path} (che ovviamente deve esistere) ed ogni pathname assoluto sarà