Sistemati i riferimenti
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 13 Aug 2001 20:53:15 +0000 (20:53 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 13 Aug 2001 20:53:15 +0000 (20:53 +0000)
12 files changed:
elemtcp.tex
filedir.tex
fileintro.tex
filestd.tex
fileunix.tex
gapil.tex
intro.tex
ipprot.tex
macro.tex
network.tex
process.tex
simpltcp.tex

index 812da04d6f9759d58d9f10d1da1a4a95cc4f1fd8..9cfcb35fc356cfdfca660d1f7fff2638c244cbdb 100644 (file)
@@ -327,8 +327,8 @@ La MSL 
 sulla rete; questo tempo è limitato perché ogni pacchetto IP può essere
 ritrasmesso dai router un numero massimo di volte (detto \textit{hop limit}).
 Il numero di ritrasmissioni consentito è indicato dal campo TTL dell'header di
-IP (per maggiori dettagli vedi \secref{sec:appA_xxx}), e viene decrementato ad
-ogni passaggio da un router; quando si annulla il pacchetto viene scartato.
+IP (per maggiori dettagli vedi \secref{sec:IP_xxx}), e viene decrementato
+ad ogni passaggio da un router; quando si annulla il pacchetto viene scartato.
 Siccome il numero è ad 8 bit il numero massimo di ``salti'' è di 255, pertanto
 anche se il TTL (da \textit{time to live}) non è propriamente un limite sul
 tempo di vita, si stima che un pacchetto IP non possa restare nella rete per
@@ -797,7 +797,7 @@ da errori o problemi nella chiamata della funzione sono le seguenti:
 \end{enumerate}
 
 Se si fa riferimento al diagramma degli stati del TCP riportato in
-\figref{fig:appB:tcp_state_diag} la funzione \texttt{connect} porta un socket
+\figref{fig:TCP_state_diag} la funzione \texttt{connect} porta un socket
 dallo stato \texttt{CLOSED} (lo stato iniziale in cui si trova un socket
 appena creato) prima allo stato \texttt{SYN\_SENT} e poi, al ricevimento del
 ACK, nello stato \texttt{ESTABLISHED}. Se invece la connessione fallisce il
@@ -1024,8 +1024,8 @@ l'invio dei dati.
 \subsection{La funzione \texttt{close}}
 \label{sec:TCPel_func_close}
 
-La funzione standard unix \texttt{close} (vedi \secref{sec:fileunix_close})
-che si usa sui file può essere usata con lo stesso effetto anche sui socket
+La funzione standard unix \texttt{close} (vedi \secref{sec:file_close}) che si
+usa sui file può essere usata con lo stesso effetto anche sui socket
 descriptor.
 
 L'azione standard di questa funzione quando applicata a socket è di marcarlo
index 0ee1b396f777da6e1848c3207554e051495fef7f..940c4bbdb313a8bad2a3ccbcaa8d582990862937 100644 (file)
@@ -11,7 +11,7 @@ capitoli successivi.
 
 
 \section{Il controllo di accesso ai file}
-\label{sec:filedir_access_control}
+\label{sec:file_access_control}
 
 Una delle caratteristiche fondamentali di tutti i sistemi unix-like è quella
 del controllo di accesso ai file, che viene implementato per qualunque
@@ -20,7 +20,7 @@ le funzioni usate per gestirne i vari aspetti.
 
 
 \subsection{I permessi per l'accesso ai file}
-\label{sec:filedir_perm_overview}
+\label{sec:file_perm_overview}
 
 Il controllo di accesso ai file in unix segue un modello abbastanza semplice,
 ma adatto alla gran parte delle esigenze, in cui si dividono i permessi su tre
@@ -36,7 +36,7 @@ Ad ogni file unix associa sempre l'utente che ne 
 \textit{owner}) e il gruppo di appartenenza, secondo il meccanismo degli
 identificatori di utenti e gruppi (\textsl{uid} e \textsl{gid}). Questi valori
 sono accessibili da programma tramite i campi \var{st\_uid} e \var{st\_gid}
-della struttura \var{stat} (si veda \secref{sec:filedir_stat}). Ad ogni file
+della struttura \var{stat} (si veda \secref{sec:file_stat}). Ad ogni file
 viene inoltre associato un insieme di permessi che sono divisi in tre classi,
 e cioè attribuiti rispettivamente all'utente proprietario del file, a un
 qualunque utente faccia parte del gruppo cui appartiene il file, e a tutti gli
@@ -49,13 +49,13 @@ esecuzione (indicati nei comandi di sistema con le lettere \cmd{w}, \cmd{r} e
 \cmd{x}) ed applicabili rispettivamente al proprietario, al gruppo, a tutti
 gli altri.  I restanti tre bit (\textsl{suid}, \textsl{sgid}, e
 \textsl{sticky}) sono usati per indicare alcune caratteristiche più complesse
-su cui torneremo in seguito (vedi \secref{sec:filedir_suid_sgid} e
-\secref{sec:filedir_sticky}).
+su cui torneremo in seguito (vedi \secref{sec:file_suid_sgid} e
+\secref{sec:file_sticky}).
 
 Anche i permessi, come tutte le altre informazioni generali, sono tenuti per
 ciascun file nell'inode; in particolare essi sono contenuti in alcuni bit
 del campo \var{st\_mode} della struttura letta da \func{stat} (di nuovo si veda
-\secref{sec:filedir_stat} per i dettagli).
+\secref{sec:file_stat} per i dettagli).
 
 In genere ci si riferisce a questo raggruppamento dei permessi usando le
 lettere \cmd{u} (per \textit{user}), \cmd{g} (per \textit{group}) e \cmd{o}
@@ -136,7 +136,7 @@ fa riferimento; per questo in genere \cmd{ls} per un link simbolico riporta
 tutti i permessi come concessi; utente e gruppo a cui esso appartiene vengono
 ignorati quando il link viene risolto, vengono controllati solo quando viene
 richiesta la rimozione del link e quest'ultimo è in una directory con lo
-\textsl{sticky bit} settato (si veda \secref{sec:filedir_sticky}).
+\textsl{sticky bit} settato (si veda \secref{sec:file_sticky}).
 
 La procedura con cui il kernel stabilisce se un processo possiede un certo
 permesso (di lettura, scrittura o esecuzione) si basa sul confronto fra
@@ -147,7 +147,7 @@ del processo.
 
 Per una spiegazione dettagliata degli identificatori associati ai processi si
 veda \secref{sec:prochand_perms}; normalmente, a parte quanto vedremo in
-\secref{sec:filedir_suid_sgid}, l'\textit{effective user id} e
+\secref{sec:file_suid_sgid}, l'\textit{effective user id} e
 l'\textit{effective group id} corrispondono a uid e gid dell'utente che ha
 lanciato il processo, mentre i \textit{supplementary group id} sono quelli dei
 gruppi cui l'utente appartiene.
@@ -203,9 +203,9 @@ tutti gli altri non vengono controllati.
 
 
 \subsection{I bit \textsl{suid} e \textsl{sgid}}
-\label{sec:filedir_suid_sgid}
+\label{sec:file_suid_sgid}
 
-Come si è accennato (in \secref{sec:filedir_perm_overview}) nei dodici bit del
+Come si è accennato (in \secref{sec:file_perm_overview}) nei dodici bit del
 campo \var{st\_mode} usati per il controllo di accesso oltre ai bit dei
 permessi veri e propri, ci sono altri tre bit che vengono usati per indicare
 alcune proprietà speciali dei file.  Due di questi sono i bit detti
@@ -247,12 +247,12 @@ stessa lettera \cmd{s} pu
 questi bit. Infine questi bit possono essere controllati all'interno di
 \var{st\_mode} con l'uso delle due costanti \macro{S\_ISUID} e
 \macro{S\_IGID}, i cui valori sono riportati in
-\tabref{tab:filedir_file_mode_flags}.
+\tabref{tab:file_mode_flags}.
 
 Gli stessi bit vengono ad assumere in significato completamente diverso per le
 directory, normalmente infatti Linux usa la convenzione di SVR4 per indicare
 con questi bit l'uso della semantica BSD nella creazione di nuovi file (si
-veda \secref{sec:filedir_ownership} per una spiegazione dettagliata al
+veda \secref{sec:file_ownership} per una spiegazione dettagliata al
 proposito).
 
 Infine Linux utilizza il bit \textsl{sgid} per una ulteriore estensione
@@ -263,7 +263,7 @@ dettagli in \secref{sec:xxx_mandatory_lock}).
 
 
 \subsection{Il bit \textsl{sticky}}
-\label{sec:filedir_sticky}
+\label{sec:file_sticky}
 
 L'ultimo dei bit rimanenti, identificato dalla costante \macro{S\_ISVTX}, è in
 parte un rimasuglio delle origini dei sistemi unix. A quell'epoca infatti la
@@ -299,8 +299,9 @@ inoltre 
 un classico esempio di directory che ha questo bit settato è \file{/tmp}, i
 permessi infatti di solito sono settati come:
 \begin{verbatim}
+$ ls -l /tmp
 drwxrwxrwt    6 root     root         1024 Aug 10 01:03 /tmp
-\end{verbatim}
+\end{verbatim}%$
 in questo modo chiunque può leggere, scrivere ed eseguire i file temporanei
 ivi memorizzati, sia crearne di nuovi, ma solo l'utente che ha creato un file
 nella directory potrà cancellarlo o rinominarlo, evitando così che utente
@@ -308,26 +309,26 @@ possa, pi
 
 
 \subsection{La titolarità di nuovi file e directory}
-\label{sec:filedir_ownership}
+\label{sec:file_ownership}
 
-Vedremo in \secref{sec:fileunix_base_func} quali sono le funzioni per creare
-nuovi file, ma se è possibile specificare in sede di creazione quali permessi
-applicare ad un nuovo file, non si può indicare a quale utente e gruppo esso
-deve appartenere. Lo stesso problema di presenta per la creazione di nuove
-directory (procedimento descritto in \secref{sec:filedir_dir_creat_rem}).
+Vedremo in \secref{sec:file_base_func} come creare nuovi file, ma se è
+possibile specificare in sede di creazione quali permessi applicare ad un
+file, non si può indicare a quale utente e gruppo esso deve appartenere.  Lo
+stesso problema di presenta per la creazione di nuove directory (procedimento
+descritto in \secref{sec:file_dir_creat_rem}).
 
 Lo standard POSIX prescrive che l'uid del nuovo file corrisponda
 all'\textit{effective user id} del processo che lo crea; per il gid invece
 prevede due diverse possibilità:
 \begin{itemize}
-\item il gid del file corrisponde all'\textit{effective group id} del processo
-\item il gid del file corrisponde al gid della directory in cui esso è creato
+\item il gid del file corrisponde all'\textit{effective group id} del processo.
+\item il gid del file corrisponde al gid della directory in cui esso è creato.
 \end{itemize}
 in genere BSD usa sempre la seconda possibilità, che viene per questo chiamata
 semantica BSD. Linux invece segue quella che viene chiamata semantica SVR4; di
 norma cioè il nuovo file viene creato, seguendo la prima opzione, con il gid
-del processo, se però la directory in cui viene creato il file ha il bit sgid
-settato allora viene usata la seconda opzione..
+del processo, se però la directory in cui viene creato il file ha il bit
+\textsl{sgid} settato allora viene usata la seconda opzione..
 
 Usare la semantica BSD ha il vantaggio che il gid viene sempre automaticamente
 propagato, restando coerente a quello della directory di partenza, in tutte le
@@ -340,14 +341,14 @@ del gruppo primario dello stesso.
 
 
 \subsection{La funzione \texttt{access}}
-\label{sec:filedir_access}
+\label{sec:file_access}
 
-Come detto in \secref{sec:filedir_access_control} il controllo di accesso ad
+Come detto in \secref{sec:file_access_control} il controllo di accesso ad
 un file viene fatto usando \textit{effective user id} e \textit{effective
   group id} del processo, ma ci sono casi in cui si può voler effettuare il
 controllo usando il \textit{real user id} e il \textit{real group id} (cioè
 l'uid dell'utente che ha lanciato il programma, che, come accennato in
-\secref{sec:filedir_suid_sgid} e spiegato in \secref{sec:prochand_perms} non è
+\secref{sec:file_suid_sgid} e spiegato in \secref{sec:prochand_perms} non è
 detto sia uguale all'\textit{effective user id}). Per far questo si può usare
 la funzione \func{access}, il cui prototipo è:
 
@@ -358,7 +359,7 @@ la funzione \func{access}, il cui prototipo 
   file indicato da \var{pathname}. 
   
   La funzione ritorna 0 se l'accesso è consentito, -1 altrimenti; in
-  quest'utlimo caso la variabile \texttt{errno} viene settata secondo i codici
+  quest'ultimo caso la variabile \texttt{errno} viene settata secondo i codici
   di errore: \macro{EACCES}, \macro{EROFS}, \macro{EFAULT}, \macro{EINVAL},
   \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOTDIR}, \macro{ELOOP},
   \macro{EIO}.
@@ -393,7 +394,7 @@ contrario (o di errore) ritorna -1.
   \end{tabular}
   \caption{Valori possibile per il parametro \var{mode} della funzione 
     \func{access}}
-  \label{tab:filedir_access_mode_val}
+  \label{tab:file_access_mode_val}
 \end{table}
 
 Un esempio tipico per l'uso di questa funzione è quello di un processo che sta
@@ -403,7 +404,7 @@ accedere ad un certo file.
 
 
 \subsection{Le funzioni \texttt{chmod} e \texttt{fchmod}}
-\label{sec:filedir_chmod}
+\label{sec:file_chmod}
 
 Per cambiare i permessi di un file il sistema mette ad disposizione due
 funzioni, che operano rispettivamente su un filename e su un file descriptor,
@@ -428,7 +429,7 @@ i cui prototipi sono:
   Oltre a questi entrambe restituiscono gli errori \macro{EROFS} e
   \macro{EIO}; \func{chmod} restituisce anche \macro{EFAULT},
   \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR},
-  \macro{EACCES}, \macro{ELOOP}; \func{chmod} anche \macro{EBADF}.
+  \macro{EACCES}, \macro{ELOOP}; \func{fchmod} anche \macro{EBADF}.
 \end{functions}
 
 I valori possibili per \var{mode} sono indicati in \ntab. I valori possono
@@ -484,7 +485,7 @@ il valore da fornire sarebbe $4755$.
     \hline
   \end{tabular}
   \caption{I valori delle costanti usate per indicare i permessi dei file.}
-  \label{tab:filedir_permission_const}
+  \label{tab:file_permission_const}
 \end{table}
 
 Il cambiamento dei permessi di un file attraverso queste funzioni ha comunque
@@ -517,7 +518,7 @@ privilegio.
 
 
 \subsection{La funzione \texttt{umask}}
-\label{sec:filedir_umask}
+\label{sec:file_umask}
 
 Oltre che dai valori indicati in sede di creazione, i permessi assegnati ai
 nuovi file sono controllati anche da una maschera di bit settata con la
@@ -544,7 +545,7 @@ corrispondente ad un valore di $022$). Essa 
 dell'interfaccia ANSI C degli stream non prevedono l'esistenza dei permessi, e
 pertanto tutti i nuovi file vengono sempre creati con un default di $666$
 (cioè permessi di lettura e scrittura per tutti, si veda
-\tabref{tab:filedir_permission_const} per un confronto); in questo modo è
+\tabref{tab:file_permission_const} per un confronto); in questo modo è
 possibile cancellare automaticamente i permessi non voluti, senza doverlo fare
 esplicitamente.
 
@@ -554,44 +555,57 @@ vuole che un processo possa creare un file che chiunque possa leggere allora
 occorrerà cambiare il valore di \func{umask}.
 
 \subsection{Le funzioni \texttt{chown}, \texttt{fchown} e \texttt{lchown}}
-\label{sec:filedir_chown}
+\label{sec:file_chown}
 
 Come per i permessi, il sistema fornisce anche delle funzioni che permettano
-di cambiare utente e gruppo cui il file appartiene; le funzioni in questioni
+di cambiare utente e gruppo cui il file appartiene; le funzioni in questione
 sono tre e i loro prototipi sono i seguenti:
 
 \begin{functions}
   \headdecl{sys/types.h} 
   \headdecl{sys/stat.h} 
   
-  \funcdecl{int chmod(const char *path, mode\_t mode)} Cambia i permessi del
-  file indicato da \var{path} al valore indicato da \var{mode}.
-  
-  \funcdecl{int fchmod(int fd, mode\_t mode)} Analoga alla precedente, ma usa
-  il file descriptor \var{fd} per indicare il file.
+  \funcdecl{int chown(const char *path, uid\_t owner, gid\_t group)}
+  \funcdecl{int fchown(int fd, uid\_t owner, gid\_t group)}
+  \funcdecl{int lchown(const char *path, uid\_t owner, gid\_t group)}
+
+  Le funzioni cambiano utente e gruppo di appartenenza di un file ai valori
+  specificati dalle variabili \var{owner} e \var{group}. 
 
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
   caso di errore \texttt{errno} viene settato ai valori:
   \begin{errlist}
   \item \macro{EPERM} L'\textit{effective user id} non corrisponde a quello
-    del proprietario del file o non è zero.
+    del proprietario del file o non è zero, o utente e gruppo non sono validi
   \end{errlist}
   Oltre a questi entrambe restituiscono gli errori \macro{EROFS} e
-  \macro{EIO}; \func{chmod} restituisce anche \macro{EFAULT},
+  \macro{EIO}; \func{chown} restituisce anche \macro{EFAULT},
   \macro{ENAMETOOLONG}, \macro{ENOENT}, \macro{ENOMEM}, \macro{ENOTDIR},
-  \macro{EACCES}, \macro{ELOOP}; \func{chmod} anche \macro{EBADF}.
+  \macro{EACCES}, \macro{ELOOP}; \func{fchown} anche \macro{EBADF}.
 \end{functions}
 
-
-
-
-
-
-
-
-
-
-
+Soltanto l'amministratore può cambiare il proprietario di un file, seguendo la
+semantica di BSD che non consente agli utenti di assegnare i loro file ad
+altri (per evitare eventuali aggiramenti delle quote). L'amministratore può
+cambiare il gruppo di un file, il proprietario può cambiare il gruppo dei file
+che gli appartengono solo se il nuovo gruppo è il suo gruppo primario o uno
+dei gruppi a cui appartiene.
+
+La funzione \func{chown} segue i link simbolici, per operare direttamente su
+in link simbolico si deve usare la funzione \func{lchown}\footnote{fino alla
+  versione 2.1.81 in Linux \func{chown} non seguiva i link simbolici, da
+  allora questo comportamento è stato assegnato alla funzione \func{lchown},
+  introdotta per l'occazione, ed è stata creata una nuova system call per
+  \func{chown} che seguisse i link simbolici}. La funzione \func{fchown} opera
+su un file aperto, essa è mututata da BSD, ma non è nello standard POSIX.
+Un'altra estensione rispetto allo standard POSIX è che specificando -1 come
+valore per \var{owner} e \var{group} i valori restano immutati. 
+
+Quando queste funzioni sono chiamate con successo da un processo senza i
+privilegi di root entrambi i bit \textsl{suid} e \textsl{sgid} vengono
+cancellati. Questo non avviene per il bit \textsl{sgid} nel caso in cui esso
+sia usato (in assenza del corrispondente permesso di esecuzione) per indicare
+che per il file è attivo il \textit{mandatory locking}.
 
 %La struttura fondamentale che contiene i dati essenziali relativi ai file è il
 %cosiddetto \textit{inode}; questo conterrà informazioni come il
@@ -602,19 +616,20 @@ sono tre e i loro prototipi sono i seguenti:
 
 
 \section{La manipolazione delle caratteristiche dei files}
-\label{sec:filedir_infos}
+\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:fileintr_filesystem} tutte le informazioni
-generali relative alle caratteristiche di ciascun file sono mantenute
-nell'inode. Vedremo in questa sezione come sia possibile accedervi usando la
-funzione \texttt{stat} ed esamineremo alcune funzioni utilizzabili per
-manipolare una parte di questa informazione. Tutto quello che invece riguarda
-il meccanismo di controllo di accesso ad i file e le relative funzioni di
-manipolazione sarà invece esaminato in \secref{sec:filedir_access_control}.
+Vedremo in questa sezione come sia possibile leggere tutte queste informazioni
+usando la funzione \texttt{stat}, esamineremo poi le varie funzioni che si
+possono per manipolare le restanti informazioni (avendo esaminato quelle per
+la gestione del controllo di accesso in \secref{sec:file_access_control}).
 
 
 \subsection{Le funzioni \texttt{stat}, \texttt{fstat} e \texttt{lstat}}
-\label{sec:filedir_stat}
+\label{sec:file_stat}
 
 La lettura delle informazioni relative ai file è fatta attraverso la famiglia
 delle funzioni \func{stat}, che è la funzione che il comando \cmd{ls} usa
@@ -638,9 +653,9 @@ i seguenti:
   descriptor \var{filedes}.
   
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \texttt{errno} viene settato ai valori \macro{EACCESS}, 
+  caso di errore \texttt{errno} viene settato ai valori \macro{EACCESS},
+  \macro{EBADF}, \macro{ELOOP}, \macro{EFAULT}, \macro{ENOENT},
   \macro{ENOTDIR}, \macro{ENOMEM}, \macro{ENAMETOOLONG}.
-  \end{errlist}
 \end{functions}
 
 La struttura \texttt{stat} è definita nell'header \texttt{sys/stat.h} e in
@@ -674,7 +689,7 @@ struct stat {
   \normalsize 
   \caption{La struttura \texttt{stat} per la lettura delle informazioni dei 
     file}
-  \label{fig:filedir_stat_struct}
+  \label{fig:file_stat_struct}
 \end{figure}
 
 Si noti come i vari membri della struttura siano specificati come tipi nativi
@@ -683,11 +698,12 @@ del sistema (di quelli definiti in \tabref{tab:xxx_sys_types}, e dichiarati in
 
 
 \subsection{I tipi di file}
-\label{sec:filedir_file_types}
+\label{sec:file_types}
 
-Come riportato in \tabref{tab:fileintr_file_types} in Linux oltre ai file e
+Come riportato in \tabref{tab:file_file_types} in Linux oltre ai file e
 alle directory esistono vari altri oggetti che possono stare su un filesystem;
-il tipo di file è ritornato dalla \texttt{stat} nel campo \texttt{st\_mode}.
+il tipo di file è ritornato dalla \texttt{stat} nel campo \texttt{st\_mode}
+(che è quello che contiene anche le informazioni relative ai permessi).
 
 Dato che il valore numerico può variare a seconda delle implementazioni, lo
 standard POSIX definisce un insieme di macro per verificare il tipo di files,
@@ -712,7 +728,7 @@ definite in GNU/Linux 
     \hline    
   \end{tabular}
   \caption{Macro per i tipi di file (definite in \texttt{sys/stat.h})}
-  \label{tab:filedir_file_type_macro}
+  \label{tab:file_type_macro}
 \end{table}
 
 Oltre a queste macro è possibile usare direttamente il valore di
@@ -740,17 +756,17 @@ per questo sempre in \texttt{sys/stat.h} sono definiti i flag riportati in
     \macro{S\_ISGID}  &  0002000 & set GID bit   \\
     \macro{S\_ISVTX}  &  0001000 & sticky bit    \\
     \hline
-    \macro{S\_IRWXU}  &  00700   & bitmask per i permessi del proprietario  \\
+%    \macro{S\_IRWXU}  &  00700   & bitmask per i permessi del proprietario  \\
     \macro{S\_IRUSR}  &  00400   & il proprietario ha permesso di lettura   \\
     \macro{S\_IWUSR}  &  00200   & il proprietario ha permesso di scrittura \\
     \macro{S\_IXUSR}  &  00100   & il proprietario ha permesso di esecuzione\\
     \hline
-    \macro{S\_IRWXG}  &  00070   & bitmask per i permessi del gruppo        \\
+%    \macro{S\_IRWXG}  &  00070   & bitmask per i permessi del gruppo        \\
     \macro{S\_IRGRP}  &  00040   & il gruppo ha permesso di lettura         \\
     \macro{S\_IWGRP}  &  00020   & il gruppo ha permesso di scrittura       \\
     \macro{S\_IXGRP}  &  00010   & il gruppo ha permesso di esecuzione      \\
     \hline
-    \macro{S\_IRWXO}  &  00007   & bitmask per i permessi di tutti gli altri\\
+%    \macro{S\_IRWXO}  &  00007   & bitmask per i permessi di tutti gli altri\\
     \macro{S\_IROTH}  &  00004   & gli altri hanno permesso di lettura      \\
     \macro{S\_IWOTH}  &  00002   & gli altri hanno permesso di esecuzione   \\
     \macro{S\_IXOTH}  &  00001   & gli altri hanno permesso di esecuzione   \\
@@ -758,7 +774,7 @@ per questo sempre in \texttt{sys/stat.h} sono definiti i flag riportati in
   \end{tabular}
   \caption{Costanti per l'identificazione dei vari bit che compongono il campo
     \var{st\_mode} (definite in \texttt{sys/stat.h})}
-  \label{tab:filedir_file_mode_flags}
+  \label{tab:file_mode_flags}
 \end{table}
 
 Il primo valore definisce la maschera dei bit usati nei quali viene
@@ -772,8 +788,9 @@ un file ordinario si potrebbe definire la condizione:
 in cui prima si estraggono da \var{st\_mode} i bit relativi al tipo di file e
 poi si effettua il confronto con la combinazione di tipi scelta.
 
+
 \subsection{La dimensione dei file}
-\label{sec:filedir_file_size}
+\label{sec:file_file_size}
 
 Il membro \var{st\_size} contiene la dimensione del file in byte (se il file
 è un file normale, nel caso di un link simbolico al dimensione è quella del
@@ -789,7 +806,7 @@ Si tenga conto che lunghezza del file riportata in \var{st\_size} non 
 che corrisponda all'occupazione dello spazio su disco per via della possibile
 esistenza dei cosiddetti \textsl{buchi} (detti normalmente \textit{holes}) che
 si formano tutte le volte che si va a scrivere su un file dopo aver eseguito
-una \func{seek} (vedi \secref{sec:fileunix_lseek}) oltre la sua conclusione
+una \func{seek} (vedi \secref{sec:file_lseek}) oltre la sua conclusione
 corrente.
 
 In tal caso si avranno differenti risultati a seconda del modi in cui si
@@ -814,21 +831,24 @@ le due funzioni:
   
   \funcdecl{int ftruncate(int fd, off\_t length))} Identica a \func{truncate}
   eccetto che si usa con un file aperto, specificato tramite il suo file
-  descriptor \var{fd}
+  descriptor \var{fd}.
   
   Le funzioni restituiscono zero in caso di successo e -1 per un errore, in
-  caso di errore \texttt{errno} viene settato ai valori:
+  caso di errore \texttt{errno} viene settato opportunamente; per
+  \func{ftruncate} si hanno i valori:
+  \begin{errlist}
+  \item \macro{EBADF} \var{fd}  non è un file descriptor.
+  \item \texttt{EINVAL} \var{fd} è un riferimento ad un socket, non a un file
+    o non è aperto in scrittura.
+  \end{errlist}
+  per \func{truncate} si hanno:
   \begin{errlist}
-  \item \texttt{EACCESS} non c'è il permesso di accedere al file.
-  \item \texttt{ENOTDIR} una componente del pathname non è una directory.
-  \item \texttt{EMLOOP} ci sono troppi link simbolici nel pathname.
-  \item \texttt{EFAULT} i puntatori usati sono fuori dallo spazio di indirizzi
-    del processo.
-  \item \texttt{ENOMEM} il kernel non ha a disposizione memoria sufficiente a
-    completare l'operazione. 
-  \item \texttt{ENOENT} il file non esiste. 
-  \item \texttt{ENAMETOOLONG} il filename è troppo lungo.
+  \item \texttt{EACCES} il file non ha permesso di scrittura o non si ha il
+    permesso di esecuzione una delle directory del pathname. 
+  \item \texttt{ETXTBSY} Il file è un programma in esecuzione.
   \end{errlist}
+  ed anche \macro{ENOTDIR}, \macro{ENAMETOOLONG}, \macro{ENOENT},
+  \macro{EROFS}, \macro{EIO}, \macro{EFAULT}, \macro{ELOOP}.
 \end{functions}
 
 Se il file è più lungo della lunghezza specificata i dati in eccesso saranno
@@ -839,12 +859,12 @@ zeri (e in genere si ha la creazione di un hole nel file).
 
 
 \subsection{I tempi dei file}
-\label{sec:filedir_file_times}
+\label{sec:file_file_times}
 
 Il sistema mantiene per ciascun file tre tempi. Questi sono registrati
 nell'inode insieme agli altri attibuti del file e possono essere letti tramite
 la funzione \func{stat}, che li restituisce attraverso tre campi della
-struttura in \figref{fig:filedir_stat_struct}. Il significato di detti tempi e
+struttura in \figref{fig:file_stat_struct}. Il significato di detti tempi e
 dei relativi campi è riportato nello schema in \ntab:
 
 \begin{table}[htb]
@@ -861,7 +881,7 @@ dei relativi campi 
     \hline
   \end{tabular}
   \caption{I tre tempi associati a ciascun file}
-  \label{tab:filedir_file_times}
+  \label{tab:file_file_times}
 \end{table}
 
 Il primo punto da tenere presente è la differenza fra il cosiddetto tempo di
@@ -960,7 +980,7 @@ cambiarne i permessi ha effetti solo sui tempi del file.
   \caption{Effetti delle varie funzioni su tempi di ultimo accesso 
     \textsl{(a)}, ultima modifica \textsl{(m)}  e ultimo cambiamento
     \textsl{(c)}}
-  \label{tab:filedir_times_effects}  
+  \label{tab:file_times_effects}  
 \end{table}
 
 Si noti infine come \var{st\_ctime} non abbia nulla a che fare con il tempo di
@@ -969,7 +989,7 @@ esiste.
 
 
 \subsection{La funzione \texttt{utime}}
-\label{sec:filedir_utime}
+\label{sec:file_utime}
 
 I tempi di ultimo accesso e modifica possono essere cambiati usando la
 funzione \func{utime}, il cui prototipo è:
@@ -1014,12 +1034,9 @@ molto pi
 
 
 
-
-
-
 \section{La manipolazione di file e directory}
 
-Come già accennato in \secref{sec:fileintr_filesystem} in un sistema unix-like
+Come già accennato in \secref{sec:file_filesystem} in un sistema unix-like
 i file hanno delle caratteristiche specifiche dipendenti dall'architettura del
 sistema, esamineremo qui allora le funzioni usate per la creazione di link
 simbolici e diretti  e per la gestione delle directory, approfondendo quanto
@@ -1027,7 +1044,7 @@ gi
 
 
 \subsection{Le funzioni \texttt{link} e \texttt{unlink}}
-\label{sec:fileintr_link}
+\label{sec:file_link}
 
 Una delle caratteristiche comuni a vari sistemi operativi è quella di poter
 creare dei nomi fittizi (alias o collegamenti) per potersi riferire allo
@@ -1036,7 +1053,7 @@ ambiente unix, dove tali collegamenti sono usualmente chiamati \textit{link},
 ma data la struttura del sistema ci sono due metodi sostanzialmente diversi
 per fare questa operazione.
 
-Come spiegato in \secref{sec:fileintr_architecture} l'accesso al contenuto di
+Come spiegato in \secref{sec:file_architecture} l'accesso al contenuto di
 un file su disco avviene attraverso il suo inode, e il nome che si trova in
 una directory è solo una etichetta associata ad un puntatore a detto inode.
 Questo significa che la realizzazione di un link è immediata in quanto uno
@@ -1076,7 +1093,7 @@ controllare con il campo \var{st\_nlink} di \var{stat}) aggiungendo il nuovo
 nome ai precedenti. Si noti che uno stesso file può essere così richiamato in
 diverse directory.
  
-Per quanto dicevamo in \secref{sec:fileintr_filesystem} la creazione del
+Per quanto dicevamo in \secref{sec:file_filesystem} la creazione del
 collegamento diretto è possibile solo se entrambi i pathname sono nello stesso
 filesystem; inoltre il filesystem deve supportare i collegamenti diretti (non è
 il caso ad esempio del filesystem \texttt{vfat} di windows).
@@ -1085,7 +1102,7 @@ La funzione opera sui file ordinari, come sugli altri oggetti del filesystem,
 in alcuni filesystem solo l'amministratore è in grado di creare un
 collegamento diretto ad un'altra directory, questo lo si fa perché in questo
 caso è possibile creare dei circoli nel filesystem (vedi
-\secref{sec:fileintr_symlink}) che molti programmi non sono in grado di
+\secref{sec:file_symlink}) che molti programmi non sono in grado di
 gestire e la cui rimozione diventa estremamente complicata (in genere occorre
 far girare il programma \texttt{fsck} per riparare il filesystem); data la sua
 pericolosità in generale nei filesystem usati in Linux questa caratteristica è
@@ -1140,11 +1157,11 @@ crash dei programmi; la tecnica 
 \texttt{unlink} subito dopo.
 
 \subsection{Le funzioni \texttt{remove} e \texttt{rename}}
-\label{sec:fileintr_remove}
+\label{sec:file_remove}
 
 Al contrario di quanto avviene con altri unix in Linux non è possibile usare
 \texttt{unlink} sulle directory, per cancellare una directory si può usare la
-funzione \texttt{rmdir} (vedi \secref{sec:filedir_dir_creat_rem}), oppure la
+funzione \texttt{rmdir} (vedi \secref{sec:file_dir_creat_rem}), oppure la
 funzione \texttt{remove}. Questa è la funzione prevista dallo standard ANSI C
 per cancellare un file o una directory (e funziona anche per i sistemi che non
 supportano i link diretti), che per i file è identica alla \texttt{unlink} e
@@ -1191,8 +1208,6 @@ nuovo nome dopo che il vecchio 
   \item \texttt{ENOTDIR} Uno dei componenti dei pathname non è una directory
     o\texttt{oldpath} è una directory e \texttt{newpath} esiste e non è una
     directory.
-  \item \texttt{EFAULT} o \texttt{oldpath} o \texttt{newpath} è fuori dello
-    spazio di indirizzi del processo.
   \item \texttt{EACCESS} Non c'è il permesso di scrittura per la directory in
     cui si vuole creare il nuovo link o una delle directory del pathname non
     consente la ricerca (permesso di esecuzione).
@@ -1200,21 +1215,13 @@ nuovo nome dopo che il vecchio 
     \texttt{newpath} hanno lo sticky bit attivo e i permessi del processo non
     consentono rispettivamente la cancellazione e la creazione del file, o il
     filesystem non supporta i link.
-  \item \texttt{ENAMETOOLONG} uno dei pathname è troppo lungo.
-  \item \texttt{ENOENT} Uno dei componenti del pathname non esiste o è un link
-    simbolico spezzato.
-  \item \texttt{ENOMEM} il kernel non ha a disposizione memoria sufficiente a
-    completare l'operazione. 
-  \item \texttt{EROFS} I file sono su un filesystem montato in sola lettura.
-  \item \texttt{ELOOP} Ci sono troppi link simbolici nella risoluzione del
-    pathname.
   \item \texttt{ENOSPC} Il device di destinazione non ha più spazio per la
     nuova voce. 
   \end{errlist}    
 \end{prototype}
 
 \subsection{I link simbolici}
-\label{sec:fileintr_symlink}
+\label{sec:file_symlink}
 
 Siccome la funzione \texttt{link} crea riferimenti agli inodes, essa può
 funzionare soltanto per file che risiedono sullo stesso filesystem, dato che
@@ -1250,7 +1257,7 @@ dichiarate nell'header file \texttt{unistd.h}.
   La funzione restituisce zero in caso di successo e -1 per un errore, in caso
   di errore. La variabile \texttt{errno} viene settata secondo i codici di
   errore standard di accesso ai file (trattati in dettaglio in
-  \secref{sec:filedir_access_control}) ai quali si aggiungono i seguenti:
+  \secref{sec:file_access_control}) ai quali si aggiungono i seguenti:
   \begin{errlist}
   \item \texttt{EEXIST} Un file (o una directory) con quel nome esiste di
     già.
@@ -1322,7 +1329,7 @@ link simbolico e quali possono operare direttamente sul suo contenuto.
     \hline 
   \end{tabular}
   \caption{Uso dei link simbolici da parte di alcune funzioni.}
-  \label{tab:filedir_symb_effect}
+  \label{tab:file_symb_effect}
 \end{table}
 si noti che non si è specificato il comportamento delle funzioni che operano
 con i file descriptor, in quanto la gestione del link simbolico viene in
@@ -1333,7 +1340,7 @@ genere effettuata dalla funzione che restituisce il file descriptor
   \centering
   \includegraphics[width=5cm]{img/link_loop.eps}
   \caption{Esempio di loop nel filesystem creato con un link simbolico.}
-  \label{fig:filedir_link_loop}
+  \label{fig:file_link_loop}
 \end{figure}
 
 Un caso comune che si può avere con i link simbolici è la creazione dei
@@ -1373,7 +1380,7 @@ di \file{temporaneo}.
 
 
 \subsection{Le funzioni \texttt{mkdir} e \texttt{rmdir}} 
-\label{sec:filedir_dir_creat_rem}
+\label{sec:file_dir_creat_rem}
 
 Per creare una nuova directory si può usare la seguente funzione, omonima
 dell'analogo comando di shell \texttt{mkdir}; per accedere ai tipi usati
@@ -1388,7 +1395,7 @@ programma deve includere il file \texttt{sys/types.h}.
   La funzione restituisce zero in caso di successo e -1 per un errore, in caso
   di errore \texttt{errno} viene settata secondo i codici di errore standard
   di accesso ai file (trattati in dettaglio in
-  \secref{sec:filedir_access_control}) ai quali si aggiungono i seguenti:
+  \secref{sec:file_access_control}) ai quali si aggiungono i seguenti:
   \begin{errlist}
   \item \texttt{EACCESS} 
     Non c'è il permesso di scrittura per la directory in cui si vuole inserire
@@ -1408,7 +1415,7 @@ programma deve includere il file \texttt{sys/types.h}.
  
 
 \subsection{Accesso alle directory}
-\label{sec:filedir_dir_read}
+\label{sec:file_dir_read}
 
 Benché le directory siano oggetti del filesystem come tutti gli altri non ha
 ovviamente senso aprirle come fossero dei file di dati. Può però essere utile
@@ -1420,12 +1427,12 @@ Per accedere al contenuto delle directory si usano i cosiddetti
 la funzione \texttt{opendir} apre uno di questi stream e la funzione
 \texttt{readdir} legge il contenuto della directory, i cui elementi sono le
 \textit{directory entries} (da distinguersi da quelle della cache di cui
-parlavamo in \secref{sec:fileintr_vfs}) in una opportuna struttura
+parlavamo in \secref{sec:file_vfs}) in una opportuna struttura
 \texttt{struct dirent}.
 
 
 \subsection{La directory di lavoro}
-\label{sec:filedir_work_dir}
+\label{sec:file_work_dir}
 
 A ciascun processo è associato ad una directory nel filesystem che è chiamata
 directory corrente o directory di lavoro (\textit{current working directory})
@@ -1498,7 +1505,7 @@ per cambiare directory di lavoro.
   Entrambe le funzioni restituiscono zero in caso di successo e -1 per un
   errore, in caso di errore \texttt{errno} viene settata secondo i codici di
   errore standard di accesso ai file (trattati in dettaglio in
-  \secref{sec:filedir_access_control}) ai quali si aggiunge il codice
+  \secref{sec:file_access_control}) ai quali si aggiunge il codice
   \texttt{ENOTDIR} nel caso il \texttt{filename} indichi un file che non sia
   una directory.
 \end{prototype}
index 143c7e1dc205070b02ab6d6be98bc3b428c9aa2a..d4d478522fa388caa6566451a5f9a1eddd9aebe2 100644 (file)
@@ -20,7 +20,7 @@ contempo tratteremo l'organizzazione dei file in un sistema unix-like, e le
 varie caratteristiche distintive.
 
 \section{L'organizzazione di files e directories}
-\label{sec:fileintr_organization}
+\label{sec:file_organization}
 
 Il primo passo nella trattazione dell'achitettura della gestione dei file in
 un sistema unix-like, è quello dell'esame di come essi vengono organizzati e
@@ -28,14 +28,14 @@ di quale 
 
 
 \subsection{La struttura di files e directory}
-\label{sec:fileintr_filedir_struct}
+\label{sec:file_file_struct}
 
 Partiamo allora da come viene strutturata nel sistema la disposizione dei
 file: per potervi accedere il kernel usa una apposita interfaccia che permetta
 di accedere all'informazione tenuta sullo spazio grezzo disponibile sui
 dischi, cioè quello che si chiama un \textit{filesystem}\footnote{useremo per
   brevità questo nome al posto della più prolissa traduzione italiana sistema
-  di file}, che descriviremo in dettaglio in \secref{sec:fileintr_vfs}.
+  di file}, che descriviremo in dettaglio in \secref{sec:file_vfs}.
 
 Sarà attraverso quest'ultimo che il kernel andrà a gestire l'accesso ai dati
 memorizzati all'interno del disco stesso, strutturando l'informazione in files
@@ -70,7 +70,7 @@ convenzione, sono inseriti nella directory \texttt{/dev}).
 
 L'organizzazione dei nomi dei file deriva direttamente dall'organizzazione dei
 medesimi nell'albero descritto in precedenza; una directory comunque, come già
-specificato in \secref{sec:fileintr_vfs}, è solo un particolare tipo di file
+specificato in \secref{sec:file_vfs}, è solo un particolare tipo di file
 che contiene le informazioni che associano un nome al contenuto.
 
 % Per questo, anche se è usuale parlare di ``file in una directory'' in realtà
@@ -107,9 +107,9 @@ Se il pathname comincia per \texttt{/} la ricerca parte dalla directory radice
 del processo; questa, a meno di un \textit{chroot} (su cui torneremo in
 seguito, vedi \secref{sec:xxx_chroot}) è la stessa per tutti i processi ed
 equivale alla directory radice dell'albero (come descritto in
-\secref{sec:fileintr_organization}): in questo caso si parla di un pathname
+\secref{sec:file_organization}): in questo caso si parla di un pathname
 \textsl{assoluto}. Altrimenti la ricerca parte dalla directory corrente (su
-cui torneremo più avanti in \secref{sec:filedir_work_dir}) ed il pathname è
+cui torneremo più avanti in \secref{sec:file_work_dir}) ed il pathname è
 detto \textsl{relativo}.
 
 I nomi \texttt{.} e \texttt{..} hanno un significato speciale e vengono
@@ -120,11 +120,11 @@ questa sia la directory radice allora il riferimento 
 
 
 \subsection{I tipi di files}
-\label{sec:fileintr_file_types}
+\label{sec:file_file_types}
 
 Come detto in precedenza in unix esistono vari tipi di file, in Linux questi
 sono implementati come oggetti del \textit{Virtual File System} (vedi
-\secref{sec:fileintr_vfs}) e sono presenti in tutti i filesystem unix-like
+\secref{sec:file_vfs}) e sono presenti in tutti i filesystem unix-like
 utilizzabili con Linux. L'elenco dei vari tipi di file definiti dal Virtual
 File System è riportato in \ntab.
 
@@ -156,7 +156,7 @@ dati) in base al loro contenuto, o tipo di accesso.
     \hline
     \end{tabular}
     \caption{Tipologia dei file definiti nel VFS}
-    \label{tab:fileintr_file_types}
+    \label{tab:file_file_types}
   \end{center}
 \end{table}
 
@@ -179,7 +179,7 @@ riga.
 
 
 \subsection{Le due interfacce ai file}
-\label{sec:fileintr_io_api}
+\label{sec:file_io_api}
 
 In unix le modalità di accesso ai file e le relative interfacce di
 programmazione sono due, basate su due diversi meccanismi con cui è possibile
@@ -277,7 +277,7 @@ accesso 
 cancellato da un altro processo, sarà sempre possibile mantenere l'accesso ai
 dati, e lo spazio su disco non verrà rilasciato fintanto che il file non sarà
 chiuso e l'ultimo riferimento cancellato. È pertanto possibile (come vedremo
-in dettaglio in \secref{sec:fileintr_link}) aprire un file provvisorio per
+in dettaglio in \secref{sec:file_link}) aprire un file provvisorio per
 cancellarlo immediatamente dopo; in questo modo all'uscita del programma il
 file scomparirà definitivamente dal disco, ma il file ed il suo contenuto
 saranno disponibili per tutto il tempo in cui il processo è attivo.
@@ -293,7 +293,7 @@ questa 
 
 
 \section{L'architettura della gestione dei file}
-\label{sec:fileintr_architecture}
+\label{sec:file_architecture}
 
 Per capire fino in fondo le proprietà di files e directories in un sistema
 unix-like ed il funzionamento delle relative funzioni di manipolazione occorre
@@ -311,10 +311,10 @@ l'\texttt{ext2}, come esempio di un filesystem unix-like.
 % in particolare si riprenderà, approfondendolo sul piano
 % dell'uso nelle funzioni di libreria, il concetto di \textit{inode} di cui
 % abbiamo brevemente accennato le caratteristiche (dal lato dell'implementazione
-% nel kernel) in \secref{sec:fileintr_vfs}.
+% nel kernel) in \secref{sec:file_vfs}.
 
 \subsection{Il \textit{virtual filesystem} di Linux}
-\label{sec:fileintr_vfs}
+\label{sec:file_vfs}
 
 % Questa sezione riporta informazioni sui dettagli di come il kernel gestisce i
 % files.  L'argomento è abbastanza ``esoterico'' e questa sezione può essere
@@ -342,7 +342,7 @@ di I/O sul dispositivo fisico, secondo lo schema riportato in \nfig.
   \centering
   \includegraphics[width=7cm]{img/vfs.eps}
   \caption{Schema delle operazioni del VFS}
-  \label{fig:fileintr_VFS_scheme}
+  \label{fig:file_VFS_scheme}
 \end{figure}
 
 Il VFS definisce un insieme di funzioni che tutti i filesystem devono
@@ -362,7 +362,7 @@ In questo modo quando viene effettuata la richiesta di montare un nuovo disco
 (o qualunque altro \textit{block device} che può contenere un filesystem), il
 VFS può ricavare dalla citata tabella il puntatore alle funzioni da chiamare
 nelle operazioni di montaggio. Quest'ultima è responsabile di leggere da disco
-il superblock (vedi \ref{sec:fileintr_ext2}), inizializzare tutte le
+il superblock (vedi \ref{sec:file_ext2}), inizializzare tutte le
 variabili interne e restituire uno speciale descrittore dei filesystem montati
 al VFS; attraverso quest'ultimo diventa possible accedere alle routine
 specifiche per l'uso di quel filesystem.
@@ -385,7 +385,7 @@ file gi
 
 
 \subsection{Il funzionamento del VFS}
-\label{sec:fileintr_vfs_work}
+\label{sec:file_vfs_work}
 
 La funzione più fondamentale implementata dal VFS è la system call
 \texttt{open} che permette di aprire un file. Dato un pathname viene eseguita
@@ -431,7 +431,7 @@ dentry e una struttura \verb|f_ops| che contiene i puntatori ai metodi che
 implementano le operazioni disponibili sul file. In questo modo i processi in
 user space possono accedere alle operazioni attraverso detti metodi, che
 saranno diversi a seconda del tipo di file (o dispositivo) aperto (su questo
-torneremo in dettaglio in \secref{sec:fileunix_fd}). Un elenco delle operazioni
+torneremo in dettaglio in \secref{sec:file_fd}). Un elenco delle operazioni
 previste dal kernel è riportato in \ntab.
 
 \begin{table}[htb]
@@ -459,7 +459,7 @@ previste dal kernel 
     \hline
   \end{tabular}
   \caption{Operazioni sui file definite nel VFS.}
-  \label{tab:fileintr_file_operations}
+  \label{tab:file_file_operations}
 \end{table}
 
 In questo modo per ciascun file diventano utilizzabili una serie di operazioni
@@ -476,9 +476,9 @@ diversi filesystem (come quelli usati da Windows o MacOs) 
 
 
 \subsection{Il funzionamento di un filesystem unix}
-\label{sec:fileintr_filesystem}
+\label{sec:file_filesystem}
 
-Come già accennato in \secref{sec:fileintr_organization} Linux (ed ogni unix
+Come già accennato in \secref{sec:file_organization} Linux (ed ogni unix
 in generale) organizza i dati che tiene su disco attraverso l'uso di un
 filesystem. Una delle caratteristiche di Linux rispetto agli altri unix è
 quella di poter supportare grazie al VFS una enorme quantità di filesystem
@@ -492,7 +492,7 @@ partizione pu
 dell'informazione su un disco è riportata in \nfig; in essa si fa riferimento
 alla struttura del filesystem ext2, che prevede una separazione dei dati in
 \textit{blocks group} che replicano il superblock (ma sulle caratteristiche di
-ext2 torneremo in \secref{sec:fileintr_ext2}). È comunque caratteristica
+ext2 torneremo in \secref{sec:file_ext2}). È comunque caratteristica
 comune di tutti i filesystem unix, indipendentemente da come poi viene
 strutturata nei dettagli questa informazione, prevedere una divisione fra la
 lista degli inodes e lo spazio a disposizione per i dati e le directory.
@@ -501,7 +501,7 @@ lista degli inodes e lo spazio a disposizione per i dati e le directory.
   \centering
   \includegraphics[width=9cm]{img/disk_struct.eps}
   \caption{Organizzazione dello spazio su un disco in partizioni e filesystem}
-  \label{fig:fileintr_disk_filesys}
+  \label{fig:file_disk_filesys}
 \end{figure}
 
 Se si va ad esaminare con maggiore dettaglio la strutturazione
@@ -514,7 +514,7 @@ esemplificare la situazione con uno schema come quello esposto in \nfig.
   \centering
   \includegraphics[width=11cm]{img/filesys_struct.eps}
   \caption{Strutturazionne dei dati all'interno di un filesystem}
-  \label{fig:fileintr_filesys_detail}
+  \label{fig:file_filesys_detail}
 \end{figure}
 
 Da \curfig\ si evidenziano alcune caratteristiche base di ogni filesystem su
@@ -532,7 +532,7 @@ torneremo in seguitp; in particolare 
   associato, cioè quella che da qui in poi chiameremo una \textsl{voce}
   (traduzione approssimata dell'inglese \textit{directory entry}, che non
   useremo anche per evitare confusione con le \textit{dentries} del kernel di
-  cui si parlava in \secref{sec:fileintr_vfs}).
+  cui si parlava in \secref{sec:file_vfs}).
   
 \item Come mostrato in \curfig si possono avere più voci che puntano allo
   stesso \textit{inode}. Ogni \textit{inode} ha un contatore che contiene il
@@ -567,7 +567,7 @@ chiarezza abbiamo aggiunto dei numeri di inode.
   \centering 
   \includegraphics[width=11cm]{img/dir_links.eps}
   \caption{Organizzazione dei link per le directory}
-  \label{fig:fileintr_dirs_link}
+  \label{fig:file_dirs_link}
 \end{figure}
 
 La nuova directory avrà allora un numero di riferimenti pari a due, in quanto
@@ -579,7 +579,7 @@ cui si era partiti avr
 adesso sarà referenziata anche dalla voce \file{..} di \file{img}.
 
 \subsection{Il filesystem \textsl{ext2}}
-\label{sec:fileintr_ext2}
+\label{sec:file_ext2}
 
 Il filesystem standard usato da Linux è il cosidetto \textit{second extended
   filesystem}, identificato dalla sigla \textsl{ext2}. Esso supporta tutte le
@@ -601,7 +601,7 @@ seguenti:
   semantica SysV comporta che i file vengono creati con l'identificatore del
   gruppo primario del processo, eccetto il caso in cui la directory ha il bit
   di sgid settato (per una descrizione dettagliata del significato di questi
-  termini si veda \secref{sec:filedir_access_control}), nel qual caso file e
+  termini si veda \secref{sec:file_access_control}), nel qual caso file e
   sottodirectory ereditano sia il group id che il sgid.
 \item l'amministratore può scegliere la dimensione dei blocchi del filesystem
   in fase di creazione, a seconda delle sue esigenze (blocchi più grandi
@@ -619,7 +619,7 @@ seguenti:
 
 La struttura di \textsl{ext2} è stata ispirata a quella del filesystem di BSD,
 un filesystem è composto da un insieme di blocchi, la struttura generale è
-quella riportata in \figref{fig:fileintr_filesys_detail}, in cui la partizione
+quella riportata in \figref{fig:file_filesys_detail}, in cui la partizione
 è divisa in gruppi di blocchi.
 
 Ciascun gruppo di blocchi contiene una copia delle informazioni essenziali del
@@ -632,7 +632,7 @@ superblock principale.
   \centering
   \includegraphics[width=9cm]{img/dir_struct.eps}  
   \caption{Struttura delle directory nel \textit{second extented filesystem}.}
-  \label{fig:fileintr_ext2_dirs}
+  \label{fig:file_ext2_dirs}
 \end{figure}
 
 L'utilizzo di raggrupamenti di blocchi ha inoltre degli effetti positivi nelle
index da1f600a03304454da3745f70f386afaf9706830..aa558786b3a12dbe192511402c8ce09484ddd4cd 100644 (file)
@@ -5,7 +5,7 @@
 % Questa va per ultima. Va bene che e` la più usata, ma è basata sulle altre
 %
 \section{I file stream e gli oggetti \texttt{FILE}}
-\label{sec:filestd_stream}
+\label{sec:file_stream}
 
 Esamineremo in questa sezione l'interfaccia per i file stream, le modalità per
 crearli, e le funzioni disponibili per leggere, scrivere e compiere le varie
@@ -22,7 +22,7 @@ del tipo \texttt{FILE *} (tanto che in certi caso il termine di puntatore a
 file è diventato sinonimo di stream). 
 
 \subsection{Gli stream standard}
-\label{sec:filestd_stdfiles}
+\label{sec:file_stdfiles}
 
 Quando un programma viene lanciato il processo ha sempre tre stream
 predefiniti aperti, che rappresentano i canali standard di input/output
@@ -43,44 +43,44 @@ nell'header \texttt{stdio.h} e sono:
 
 
 \subsection{La bufferizzazione}
-\label{sec:filestd_buffering}
+\label{sec:file_buffering}
 
 \section{Funzioni base}
-\label{sec:filestd_base_func}
+\label{sec:file_ansi_base_func}
 
 \subsection{Apertura di uno stream}
-\label{sec:filestd_open}
+\label{sec:file_fopen}
 
 \subsection{Lettura e scrittura su uno stream}
-\label{sec:filestd_io}
+\label{sec:file_io}
 
 \subsection{Posizionamento su uno stream}
-\label{sec:filestd_seek}
+\label{sec:file_fseek}
 
 \subsection{Input/output binario}
-\label{sec:filestd_binary_io}
+\label{sec:file_binary_io}
 
 \subsection{Input/output di linea}
-\label{sec:filestd_line_io}
+\label{sec:file_line_io}
 
 \subsection{Input/output formattato}
-\label{sec:filestd_formatted_io}
+\label{sec:file_formatted_io}
 
 \subsection{Chiusura di uno stream}
-\label{sec:filestd_close}
+\label{sec:file_fclose}
 
 \section{Funzioni avanzate}
-\label{sec:filestd_adv_func}
+\label{sec:file_stream_adv_func}
 
 
 \subsection{Dettagli dell'implementazione}
-\label{sec:filestd_details}
+\label{sec:file_stream_details}
 
 \subsection{File temporanei}
-\label{sec:filestd_temp_file}
+\label{sec:file_temp_file}
 
 \subsection{Efficienza}
-\label{sec:filestd_efficiency}
+\label{sec:file_stream_efficiency}
 
 
 
index 4d9daef3e2bb12057b9dba6e1a20ced630b09426..4d23bdf06c57495098844660e84e53e9cf11b5c9 100644 (file)
@@ -6,9 +6,8 @@ Esamineremo in questo capitolo la prima delle due interfacce di programmazione
 per i file, quella dei file descriptor, nativa di unix.
 
 
-
 \section{I file descriptors}
-\label{sec:fileunix_fd}
+\label{sec:file_fd}
 
 
 Per poter accedere al contenuto dei file occorre anzitutto aprirlo. Questo
@@ -18,48 +17,48 @@ questo chiuder
 operazione.
 
 \section{Le funzioni base}
-\label{sec:fileunix_base_func}
+\label{sec:file_base_func}
 
 L'interfaccia standard unix per l'input/output sui file è su cinque funzioni
 \texttt{open}, \texttt{read}, \texttt{write}, \texttt{lseek}, \texttt{close}
 
 
 \subsection{La funzione \texttt{open}}
-\label{sec:fileunix_open}
+\label{sec:file_open}
 
 \subsection{La funzione \texttt{creat}}
-\label{sec:fileunix_creat}
+\label{sec:file_creat}
 
 \subsection{La funzione \texttt{close}}
-\label{sec:fileunix_close}
+\label{sec:file_close}
 
 \subsection{La funzione \texttt{lseek}}
-\label{sec:fileunix_lseek}
+\label{sec:file_lseek}
 
 \subsection{La funzione \texttt{read}}
-\label{sec:fileunix_read}
+\label{sec:file_read}
 
 \subsection{La funzione \texttt{write}}
-\label{sec:fileunix_write}
+\label{sec:file_write}
 
 \section{La condivisione dei files}
-\label{sec:fileunix_sharing}
+\label{sec:file_sharing}
 
 
 \subsection{Operazioni atomiche}
-\label{sec:fileunix_atomic}
+\label{sec:file_atomic}
 
 \section{Funzioni avanzate}
-\label{sec:fileunix_adv_func}
+\label{sec:file_adv_func}
 
 \subsection{La funzioni \texttt{dup} e \texttt{dup2}}
-\label{sec:fileunix_dup}
+\label{sec:file_dup}
 
 \subsection{La funzione \texttt{fcntl}}
-\label{sec:fileunix_fcntl}
+\label{sec:file_fcntl}
 
 \subsection{La funzione \texttt{ioctl}}
-\label{sec:fileunix_ioctl}
+\label{sec:file_ioctl}
 
 
 
index 8e81f4cccf04b70850e274be2fe0259bd791c20a..5d8c2171b2f9ef20c0cbf2024479e54866657737 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
 \appendix
 \include{ipprot}
 \include{tcpprot}
+\include{errors}
 \include{fdl}
 
 % at the end put the bibliography
index 4442d526fd6050c83b96009a0e245973212064db..aa39c3db42b7fdffcbc05b2a2e51bd0dd89c216f 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -217,7 +217,7 @@ In questo modo il sistema 
 dell'utente a cui appartiene ed impedire ad altri utenti di interferire con
 esso. Inoltre con questo sistema viene anche garantita una forma base di
 sicurezza interna in quanto anche l'accesso ai file (vedi
-\secref{sec:filedir_access_control}) è regolato da questo meccanismo di
+\secref{sec:file_access_control}) è regolato da questo meccanismo di
 identificazione.
 
 Un utente speciale del sistema è \textit{root}, il cui uid è zero. Esso
@@ -326,15 +326,24 @@ che c'
 Per riportare il tipo di errore il sistema usa la variabile globale
 \var{errno}\footnote{L'uso di una variabile globale può comportare alcuni
   problemi (ad esempio nel caso dei thread) ma lo standard ISO C consente
-  anche di definire \var{errno} come un \textit{modifible lvalue}, quindi si
+  anche di definire \var{errno} come un \textit{modifiable lvalue}, quindi si
   può anche usare una macro, e questo è infatti il modo usato da Linux per
   renderla locale ai singoli thread
 }, definita nell'header \file{errno.h}, la variabile è in genere
 definita come \var{volatile} dato che può essere cambiata in modo asincrono da
-un segnale (per una descrizione dei segnali si veda \secref{cha:signal}), ma
+un segnale (per una descrizione dei segnali si veda \secref{cha:signals}), ma
 dato che un manipolatore di segnale scritto bene salva e ripristina il valore
 della varibile, di questo non è necessario preoccuparsi nella programmazione
 normale.
 
+I valori che può assumere \var{errno} sono riportati in \capref{cha:errors},
+nell'header \file{errno.h} sono anche definiti i nomi simbolici per le
+costanti numeriche che identificano i vari errori. In seguito faremo sempre
+rifermento a tali valori, quando descriveremo i possibili errori restituiti
+dalle funzioni.
+
+\subsection{Le funzioni \func{strerror} e \func{perror}}
+\label{sec:intro_strerror}
+
 
 
index 5c857304862c214b3434861e4bbb7fb94ae3268f..c02ba10d9be0307741c48a8f131c323715d11ce5 100644 (file)
@@ -41,8 +41,8 @@ quest'ultime assegnare i numeri dei singoli host.
 
 Per venire incontro alle diverse esigenze gli indirizzi di rete sono stati
 originariamente organizzati in \textit{classi}, (rappresentate in
-Tab.~\ref{tab:ipv4class}), per consentire dispiegamenti di reti di dimensioni
-diverse.
+Tab.~\ref{tab:IP_ipv4class}), per consentire dispiegamenti di reti di
+dimensioni diverse.
 
 
 \begin{table}[htb]
@@ -327,7 +327,7 @@ di IPv4 (vedi \secref{tab:IP_ipv4head}) mostra le seguenti differenze:
 \item è stato eliminato il campo \textit{header lenght} in quanto le opzioni
   sono state tolte dalla testata che ha così dimensione fissa; ci possono
   essere più testate opzionali (\textsl{testate di estensione}, vedi
-  \secref{sec:_IP_ipv6_extens}), ciascuna delle quali avrà un suo campo di
+  \secref{sec:IP_ipv6_extens}), ciascuna delle quali avrà un suo campo di
   lunghezza all'interno.
 \item la testata e gli indirizzi sono allineati a 64 bit, questo rende più
   veloce il processo da parte di computer con processori a 64 bit.
@@ -422,7 +422,7 @@ di IPv4 (vedi \secref{tab:IP_ipv4head}) mostra le seguenti differenze:
       indica la posizione del frammento rispetto al pacchetto originale\\
       \textit{time to live}    & 16 bit & \textsl{tempo di vita},
       ha lo stesso significato di
-      \textit{hop limit}, vedi Tab.~\ref{tab:ipv6field}\\
+      \textit{hop limit}, vedi Tab.~\ref{tab:IP_ipv6field}\\
       \textit{protocol}        &  8 bit & \textsl{protocollo} 
       identifica il tipo di pacchetto che segue
       la testata di IPv4\\
@@ -444,7 +444,7 @@ quello di IPv6 sono le seguenti:
 \begin{itemize}
 \item il broadcasting non è previsto in IPv6, le applicazioni che lo usano
   dovono essere reimplementate usando il multicasting (vedi
-  \secref{sec:IP_multicast}), che da opzionale diventa obbligatorio.
+  \secref{sec:IP_ipv6_multicast}), che da opzionale diventa obbligatorio.
 \item è stato introdotto un nuovo tipo di indirizzi, gli \textit{anycast}.
 \item i router non possono più frammentare i pacchetti lungo il cammino, la
   frammentazione di pacchetti troppo grandi potrà essere gestita solo ai
@@ -1343,5 +1343,5 @@ fino al vettore di inizializzazione, il resto 
 
 
 \section{Autoconfigurazione}
-\label{sec:autoconf}
+\label{sec:IP_ipv6_autoconf}
 
index 8f3092da243a139423e0572c0eab9586175fe74d..dfa9452114d39e5df6a68213417a95df3517e7b4 100644 (file)
--- a/macro.tex
+++ b/macro.tex
@@ -123,3 +123,4 @@ tab.~\thechapter.\theusercount}
 \newcommand{\link}[1]{\texttt{#1}}    % html link
 \newcommand{\type}[1]{\texttt{#1}}    % variable type
 \newcommand{\param}[1]{\texttt{#1}}   % function parameter
+\newcommand{\acr}[1]{\textsl{#1}}     % acrostic (for pid, suid, etc.)
index 849b9d572ca89c83141dc1f991675c5f84ac4bec..879f9708bda4d2ccc59f534e7806865604d9aaab 100644 (file)
@@ -776,7 +776,7 @@ dimensioni eccedono la MTU viene eseguita la cosiddetta
 \textit{frammentazione}, i pacchetti cioè vengono spezzati (sia da IPv4 che da
 IPv6, anche se i pacchetti frammentati sono gestiti con modalità
 diverse\footnote{il primo usa un flag nell'header, il secondo una opportuna
-  opzione, si veda \secref{cha:ip_protcol}}), in blocchi più piccoli che
+  opzione, si veda \secref{cha:ip_protocol}}), in blocchi più piccoli che
 possono essere trasmessi attraverso l'interfaccia.
 
 \begin{table}[!htb]
index dae486ffe1efc64812c09dd5dec1c863c094ed2e..23c61c5cfeb6f8b4498b41ae4015a9458b1cbe34 100644 (file)
@@ -137,7 +137,7 @@ che usa le librerie standard del C; essa esegue tutte le funzioni che sono
 state registrate con \texttt{atexit} e \texttt{on\_exit} (vedi
 \secref{sec:proc_atexit}), e chiude tutti gli stream di I/O effettuando il
 salvataggio dei dati sospesi (chiamando \texttt{fclose}, vedi
-\secref{sec:filestd_close}), infine ripassa il controllo al kernel chiamando
+\secref{sec:file_fclose}), infine ripassa il controllo al kernel chiamando
 \texttt{\_exit} e passando il valore \texttt{status} come stato di uscita.
 
 La system call \texttt{\_exit} restituisce direttamente il controllo al
index e594d2d1b85b39ec56dd8de9a609d5e429bb30b6..5b984ae276d1d813c5b665431ee3e53fe47ef509 100644 (file)
@@ -407,5 +407,5 @@ Poich
 spazio nella tabella dei processi e a lungo andare saturerebbero le risorse
 del kernel occorrerà gestire il segnale, per questo installeremo un
 manipolatore usando la funzione \texttt{Signal} (trattata in dettaglio in
-\secref{sec:sig_xxx}).  
+\secref{sec:sig_signal}).