Aggiornamento note di copyright
[gapil.git] / system.tex
index ab284810b768cbaa556e2b51dd5036224e618b53..59d68e1f500bf5c9fdec298093d62fa0df6a8c99 100644 (file)
@@ -1,6 +1,6 @@
 %% system.tex
 %%
-%% Copyright (C) 2000-2007 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2009 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -88,23 +88,23 @@ avere un valore minimo di 8.
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \const{MB\_LEN\_MAX}&       16  & massima dimensione di un 
-                                      carattere esteso\\
-    \const{CHAR\_BIT} &          8  & bit di \ctyp{char}\\
-    \const{UCHAR\_MAX}&        255  & massimo di \ctyp{unsigned char}\\
-    \const{SCHAR\_MIN}&       -128  & minimo di \ctyp{signed char}\\
-    \const{SCHAR\_MAX}&        127  & massimo di \ctyp{signed char}\\
-    \const{CHAR\_MIN} &\footnotemark& minimo di \ctyp{char}\\
-    \const{CHAR\_MAX} &\footnotemark& massimo di \ctyp{char}\\
-    \const{SHRT\_MIN} &     -32768  & minimo di \ctyp{short}\\
-    \const{SHRT\_MAX} &      32767  & massimo di \ctyp{short}\\
-    \const{USHRT\_MAX}&      65535  & massimo di \ctyp{unsigned short}\\
-    \const{INT\_MAX}  & 2147483647  & minimo di \ctyp{int}\\
-    \const{INT\_MIN}  &-2147483648  & minimo di \ctyp{int}\\
-    \const{UINT\_MAX} & 4294967295  & massimo di \ctyp{unsigned int}\\
-    \const{LONG\_MAX} & 2147483647  & massimo di \ctyp{long}\\
-    \const{LONG\_MIN} &-2147483648  & minimo di \ctyp{long}\\
-    \const{ULONG\_MAX}& 4294967295  & massimo di \ctyp{unsigned long}\\
+    \const{MB\_LEN\_MAX}&       16  & Massima dimensione di un 
+                                      carattere esteso.\\
+    \const{CHAR\_BIT} &          8  & Numero di bit di \ctyp{char}.\\
+    \const{UCHAR\_MAX}&        255  & Massimo di \ctyp{unsigned char}.\\
+    \const{SCHAR\_MIN}&       -128  & Minimo di \ctyp{signed char}.\\
+    \const{SCHAR\_MAX}&        127  & Massimo di \ctyp{signed char}.\\
+    \const{CHAR\_MIN} &\footnotemark& Minimo di \ctyp{char}.\\
+    \const{CHAR\_MAX} &\footnotemark& Massimo di \ctyp{char}.\\
+    \const{SHRT\_MIN} &     -32768  & Minimo di \ctyp{short}.\\
+    \const{SHRT\_MAX} &      32767  & Massimo di \ctyp{short}.\\
+    \const{USHRT\_MAX}&      65535  & Massimo di \ctyp{unsigned short}.\\
+    \const{INT\_MAX}  & 2147483647  & Minimo di \ctyp{int}.\\
+    \const{INT\_MIN}  &-2147483648  & Minimo di \ctyp{int}.\\
+    \const{UINT\_MAX} & 4294967295  & Massimo di \ctyp{unsigned int}.\\
+    \const{LONG\_MAX} & 2147483647  & Massimo di \ctyp{long}.\\
+    \const{LONG\_MIN} &-2147483648  & Minimo di \ctyp{long}.\\
+    \const{ULONG\_MAX}& 4294967295  & Massimo di \ctyp{unsigned long}.\\
     \hline                
   \end{tabular}
   \caption{Costanti definite in \file{limits.h} in conformità allo standard
@@ -130,10 +130,10 @@ tab.~\ref{tab:sys_isoc90_macro}.
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \const{LLONG\_MAX}& 9223372036854775807& massimo di \ctyp{long long}\\
-    \const{LLONG\_MIN}&-9223372036854775808& minimo di \ctyp{long long}\\
+    \const{LLONG\_MAX}& 9223372036854775807& Massimo di \ctyp{long long}.\\
+    \const{LLONG\_MIN}&-9223372036854775808& Minimo di \ctyp{long long}.\\
     \const{ULLONG\_MAX}&18446744073709551615&
-    massimo di \ctyp{unsigned long long}\\
+                                    Massimo di \ctyp{unsigned long long}.\\
     \hline                
   \end{tabular}
   \caption{Macro definite in \file{limits.h} in conformità allo standard
@@ -341,7 +341,8 @@ relative spiegazioni, si pu
                                   Valore massimo del tipo di dato
                                   \type{ssize\_t}.\\ 
       \texttt{\_SC\_CLK\_TCK}   & \const{CLK\_TCK} &
-                                  Il numero di \textit{clock tick} al secondo,
+                                  Il numero di \itindex{clock~tick}
+                                  \textit{clock tick} al secondo, 
                                   cioè l'unità di misura del
                                   \itindex{process~time} \textit{process
                                     time} (vedi
@@ -533,7 +534,7 @@ il manuale delle \acr{glibc} indica due diverse dimensioni,
 \const{\_UTSNAME\_LENGTH} per i campi standard e
 \const{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio;
 altri sistemi usano nomi diversi come \const{SYS\_NMLN} o \const{\_SYS\_NMLN}
-o \const{UTSLEN} che possono avere valori diversi.\footnote{Nel caso di Linux
+o \const{UTSLEN} che possono avere valori diversi.\footnote{nel caso di Linux
   \func{uname} corrisponde in realtà a 3 system call diverse, le prime due
   usano rispettivamente delle lunghezze delle stringhe di 9 e 65 byte; la
   terza usa anch'essa 65 byte, ma restituisce anche l'ultimo campo,
@@ -658,11 +659,14 @@ in \file{linux/sysctl.h},\footnote{indicando un file di definizioni si fa
 disponibile in \file{/proc/sys} è riportata inoltre nella documentazione
 inclusa nei sorgenti del kernel, nella directory \file{Documentation/sysctl}.
 
-Ma oltre alle informazioni ottenibili da \func{sysctl} dentro \file{proc} 
-sono disponibili moltissime altre informazioni, fra cui ad esempio anche
-quelle fornite da \func{uname} (vedi sez.~\ref{sec:sys_config}) che sono
-mantenute nei file \file{ostype}, \file{hostname}, \file{osrelease},
-\file{version} e \file{domainname} di \file{/proc/kernel/}.
+Ma oltre alle informazioni ottenibili da \func{sysctl} dentro \file{proc} sono
+disponibili moltissime altre informazioni, fra cui ad esempio anche quelle
+fornite da \func{uname} (vedi sez.~\ref{sec:sys_config}) che sono mantenute
+nei file \procrelfile{/proc/sys/kernel}{ostype},
+\procrelfile{/proc/sys/kernel}{hostname},
+\procrelfile{/proc/sys/kernel}{osrelease},
+\procrelfile{/proc/sys/kernel}{version} e
+\procrelfile{/proc/sys/kernel}{domainname} di \file{/proc/sys/kernel/}.
 
 
 
@@ -704,8 +708,8 @@ sulla directory \param{target}.
     di montare un filesystem disponibile in sola lettura senza averlo
     specificato o il device \param{source} è su un filesystem montato con
     l'opzione \const{MS\_NODEV}.
-  \item[\errcode{ENXIO}] il \textit{major number} del device \param{source} è
-    sbagliato.
+  \item[\errcode{ENXIO}] il \itindex{major~number} \textit{major number} del
+    device \param{source} è sbagliato.
   \item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena.
   \end{errlist}
   ed inoltre \errval{ENOTDIR}, \errval{EFAULT}, \errval{ENOMEM},
@@ -727,9 +731,10 @@ loro dati sono generati al volo ad ogni lettura, e passati al kernel ad ogni
 scrittura. 
 
 Il tipo di filesystem è specificato da \param{filesystemtype}, che deve essere
-una delle stringhe riportate nel file \file{/proc/filesystems}, che contiene
-l'elenco dei filesystem supportati dal kernel; nel caso si sia indicato uno
-dei filesystem virtuali, il contenuto di \param{source} viene ignorato.
+una delle stringhe riportate nel file \procfile{/proc/filesystems}, che
+contiene l'elenco dei filesystem supportati dal kernel; nel caso si sia
+indicato uno dei filesystem virtuali, il contenuto di \param{source} viene
+ignorato.
 
 Dopo l'esecuzione della funzione il contenuto del filesystem viene resto
 disponibile nella directory specificata come \textit{mount point}, il
@@ -792,6 +797,8 @@ valori riportati in tab.~\ref{tab:sys_mount_flags}.
 \end{table}
 
 % TODO aggiornare con i nuovi flag di man mount
+% gli S_* non esistono più come segnalato da Alessio...
+% verificare i readonly mount bind del 2.6.26
 
 Per l'impostazione delle caratteristiche particolari di ciascun filesystem si
 usa invece l'argomento \param{data} che serve per passare le ulteriori
@@ -901,15 +908,15 @@ genere 
 
 
 Le \acr{glibc} provvedono infine una serie di funzioni per la gestione dei due
-file \file{/etc/fstab} ed \file{/etc/mtab}, che convenzionalmente sono usati
-in quasi tutti i sistemi unix-like per mantenere rispettivamente le
+file \conffile{/etc/fstab} ed \conffile{/etc/mtab}, che convenzionalmente sono
+usati in quasi tutti i sistemi unix-like per mantenere rispettivamente le
 informazioni riguardo ai filesystem da montare e a quelli correntemente
 montati. Le funzioni servono a leggere il contenuto di questi file in
-opportune strutture \struct{fstab} e \struct{mntent}, e, per \file{/etc/mtab}
-per inserire e rimuovere le voci presenti nel file.
+opportune strutture \struct{fstab} e \struct{mntent}, e, per
+\conffile{/etc/mtab} per inserire e rimuovere le voci presenti nel file.
 
 In generale si dovrebbero usare queste funzioni (in particolare quelle
-relative a \file{/etc/mtab}), quando si debba scrivere un programma che
+relative a \conffile{/etc/mtab}), quando si debba scrivere un programma che
 effettua il montaggio di un filesystem; in realtà in questi casi è molto più
 semplice invocare direttamente il programma \cmd{mount}, per cui ne
 tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
@@ -924,18 +931,19 @@ tralasceremo la trattazione, rimandando al manuale delle \acr{glibc}
 
 Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi
 (password, corrispondenze fra nomi simbolici e user-id, home directory, ecc.)
-venivano registrate all'interno dei due file di testo \file{/etc/passwd} ed
-\file{/etc/group},\footnote{in realtà oltre a questi nelle distribuzioni più
-  recenti è stato introdotto il sistema delle \textit{shadow password} che
-  prevede anche i due file \file{/etc/shadow} e \file{/etc/gshadow}, in cui
-  sono state spostate le informazioni di autenticazione (ed inserite alcune
-  estensioni) per toglierle dagli altri file che devono poter essere letti per
-  poter effettuare l'associazione fra username e \acr{uid}.} il cui formato è
-descritto dalle relative pagine del manuale\footnote{nella quinta sezione,
-  quella dei file di configurazione, occorre cioè usare \cmd{man 5 passwd}
-  dato che altrimenti si avrebbe la pagina di manuale del comando
-  \cmd{passwd}.} e tutte le funzioni che richiedevano l'accesso a queste
-informazione andavano a leggere direttamente il contenuto di questi file.
+venivano registrate all'interno dei due file di testo \conffile{/etc/passwd}
+ed \conffile{/etc/group},\footnote{in realtà oltre a questi nelle
+  distribuzioni più recenti è stato introdotto il sistema delle \textit{shadow
+    password} che prevede anche i due file \conffile{/etc/shadow} e
+  \conffile{/etc/gshadow}, in cui sono state spostate le informazioni di
+  autenticazione (ed inserite alcune estensioni) per toglierle dagli altri
+  file che devono poter essere letti per poter effettuare l'associazione fra
+  username e \acr{uid}.} il cui formato è descritto dalle relative pagine del
+manuale\footnote{nella quinta sezione, quella dei file di configurazione,
+  occorre cioè usare \cmd{man 5 passwd} dato che altrimenti si avrebbe la
+  pagina di manuale del comando \cmd{passwd}.} e tutte le funzioni che
+richiedevano l'accesso a queste informazione andavano a leggere direttamente
+il contenuto di questi file.
 
 Col tempo però questa impostazione ha incominciato a mostrare dei limiti: da
 una parte il meccanismo classico di autenticazione è stato ampliato, ed oggi
@@ -1012,9 +1020,9 @@ La struttura usata da entrambe le funzioni 
 motivo viene sovrascritta ad ogni nuova invocazione, lo stesso dicasi per la
 memoria dove sono scritte le stringhe a cui i puntatori in essa contenuti
 fanno riferimento. Ovviamente questo implica che dette funzioni non possono
-essere rientranti; per questo motivo ne esistono anche due versioni
-alternative (denotate dalla solita estensione \code{\_r}), i cui prototipi
-sono:
+essere \index{funzioni!rientranti} rientranti; per questo motivo ne esistono
+anche due versioni alternative (denotate dalla solita estensione \code{\_r}),
+i cui prototipi sono:
 \begin{functions}
   \headdecl{pwd.h} 
   
@@ -1045,9 +1053,9 @@ funzione fallir
 impostato a \val{NULL}).
 
 Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e
-\funcd{getgrgid} (e le relative analoghe rientranti con la stessa estensione
-\code{\_r}) che permettono di leggere le informazioni relative ai gruppi, i
-loro prototipi sono:
+\funcd{getgrgid} (e le relative analoghe \index{funzioni!rientranti}
+rientranti con la stessa estensione \code{\_r}) che permettono di leggere le
+informazioni relative ai gruppi, i loro prototipi sono:
 \begin{functions}
   \headdecl{grp.h} 
   \headdecl{sys/types.h} 
@@ -1087,16 +1095,16 @@ fig.~\ref{fig:sys_group_struct}.
 \end{figure}
 
 Le funzioni viste finora sono in grado di leggere le informazioni sia
-direttamente dal file delle password in \file{/etc/passwd} che tramite il
-sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e
-sono completamente generiche. Si noti però che non c'è una funzione che
-permetta di impostare direttamente una password.\footnote{in realtà questo può
-  essere fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che
-POSIX non prevede questa possibilità esiste un'altra interfaccia che lo fa,
-derivata da SVID le cui funzioni sono riportate in
-tab.~\ref{tab:sys_passwd_func}. Questa però funziona soltanto quando le
-informazioni sono mantenute su un apposito file di \textsl{registro} di utenti
-e gruppi, con il formato classico di \file{/etc/passwd} e \file{/etc/group}.
+direttamente dal file delle password in \conffile{/etc/passwd} che tramite il
+sistema del \itindex{Name~Service~Switch} \textit{Name Service Switch} e sono
+completamente generiche. Si noti però che non c'è una funzione che permetta di
+impostare direttamente una password.\footnote{in realtà questo può essere
+  fatto ricorrendo a PAM, ma questo è un altro discorso.} Dato che POSIX non
+prevede questa possibilità esiste un'altra interfaccia che lo fa, derivata da
+SVID le cui funzioni sono riportate in tab.~\ref{tab:sys_passwd_func}. Questa
+però funziona soltanto quando le informazioni sono mantenute su un apposito
+file di \textsl{registro} di utenti e gruppi, con il formato classico di
+\conffile{/etc/passwd} e \conffile{/etc/group}.
 
 \begin{table}[htb]
   \footnotesize
@@ -1108,32 +1116,36 @@ e gruppi, con il formato classico di \file{/etc/passwd} e \file{/etc/group}.
     \hline
     \func{fgetpwent}   & Legge una voce dal file di registro degli utenti
                          specificato.\\
-    \func{fgetpwent\_r}& Come la precedente, ma rientrante.\\
+    \func{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti}
+                         rientrante.\\ 
     \func{putpwent}    & Immette una voce in un file di registro degli
                          utenti.\\ 
-    \func{getpwent}    & Legge una voce da \file{/etc/passwd}.\\
-    \func{getpwent\_r} & Come la precedente, ma rientrante.\\
-    \func{setpwent}    & Ritorna all'inizio di \file{/etc/passwd}.\\
-    \func{endpwent}    & Chiude \file{/etc/passwd}.\\
+    \func{getpwent}    & Legge una voce da \conffile{/etc/passwd}.\\
+    \func{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti}
+                         rientrante.\\ 
+    \func{setpwent}    & Ritorna all'inizio di \conffile{/etc/passwd}.\\
+    \func{endpwent}    & Chiude \conffile{/etc/passwd}.\\
     \func{fgetgrent}   & Legge una voce dal file di registro dei gruppi 
                          specificato.\\
-    \func{fgetgrent\_r}& Come la precedente, ma rientrante.\\
+    \func{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti}
+                         rientrante.\\
     \func{putgrent}    & Immette una voce in un file di registro dei gruppi.\\
-    \func{getgrent}    & Legge una voce da \file{/etc/group}.\\ 
-    \func{getgrent\_r} & Come la precedente, ma rientrante.\\
-    \func{setgrent}    & Ritorna all'inizio di \file{/etc/group}.\\
-    \func{endgrent}    & Chiude \file{/etc/group}.\\
+    \func{getgrent}    & Legge una voce da \conffile{/etc/group}.\\ 
+    \func{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti} 
+                         rientrante.\\
+    \func{setgrent}    & Ritorna all'inizio di \conffile{/etc/group}.\\
+    \func{endgrent}    & Chiude \conffile{/etc/group}.\\
     \hline
   \end{tabular}
   \caption{Funzioni per la manipolazione dei campi di un file usato come
-    registro per utenti o gruppi nel formato di \file{/etc/passwd} e
-    \file{/etc/groups}.} 
+    registro per utenti o gruppi nel formato di \conffile{/etc/passwd} e
+    \conffile{/etc/group}.} 
   \label{tab:sys_passwd_func}
 \end{table}
 
 Dato che oramai la gran parte delle distribuzioni di GNU/Linux utilizzano
 almeno le \textit{shadow password} (quindi con delle modifiche rispetto al
-formato classico del file \file{/etc/passwd}), si tenga presente che le
+formato classico del file \conffile{/etc/passwd}), si tenga presente che le
 funzioni di questa interfaccia che permettono di scrivere delle voci in un
 \textsl{registro} degli utenti (cioè \func{putpwent} e \func{putgrent}) non
 hanno la capacità di farlo specificando tutti i contenuti necessari rispetto a
@@ -1322,14 +1334,16 @@ gestione (\func{getutxent}, \func{getutxid}, \func{getutxline},
 sinonimi delle funzioni appena viste.
 
 Come visto in sez.~\ref{sec:sys_user_group}, l'uso di strutture allocate
-staticamente rende le funzioni di lettura non rientranti; per questo motivo le
-\acr{glibc} forniscono anche delle versioni rientranti: \func{getutent\_r},
-\func{getutid\_r}, \func{getutline\_r}, che invece di restituire un puntatore
-restituiscono un intero e prendono due argomenti aggiuntivi. Le funzioni si
-comportano esattamente come le analoghe non rientranti, solo che restituiscono
-il risultato all'indirizzo specificato dal primo argomento aggiuntivo (di tipo
-\code{struct utmp *buffer}) mentre il secondo (di tipo \code{struct utmp
-  **result)} viene usato per restituire il puntatore allo stesso buffer.
+staticamente rende le funzioni di lettura non \index{funzioni!rientranti}
+rientranti; per questo motivo le \acr{glibc} forniscono anche delle versioni
+\index{funzioni!rientranti} rientranti: \func{getutent\_r}, \func{getutid\_r},
+\func{getutline\_r}, che invece di restituire un puntatore restituiscono un
+intero e prendono due argomenti aggiuntivi. Le funzioni si comportano
+esattamente come le analoghe non \index{funzioni!rientranti} rientranti, solo
+che restituiscono il risultato all'indirizzo specificato dal primo argomento
+aggiuntivo (di tipo \code{struct utmp *buffer}) mentre il secondo (di tipo
+\code{struct utmp **result)} viene usato per restituire il puntatore allo
+stesso buffer.
 
 Infine le \acr{glibc} forniscono come estensione per la scrittura delle voci
 in \file{wmtp} altre due funzioni, \funcd{updwtmp} e \funcd{logwtmp}, i cui
@@ -1432,6 +1446,7 @@ leggere l'uso delle risorse; esso pu
 \const{RUSAGE\_CHILDREN} per indicare l'insieme dei processi figli di cui si è
 ricevuto lo stato di terminazione. 
 
+% TODO previsto in futuro \const{RUSAGE\_THREAD}, verificare.
 
 \subsection{Limiti sulle risorse}
 \label{sec:sys_resource_limit}
@@ -1468,7 +1483,7 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
                               esse falliranno con un errore di
                               \errcode{ENOMEM}, mentre se il superamento viene
                               causato dalla crescita dello \itindex{stack}
-                              stack il processo riceverà un segnale di
+                              \textit{stack} il processo riceverà un segnale di
                               \const{SIGSEGV}.\\  
     \const{RLIMIT\_CORE}   &  La massima dimensione per di un file di
                               \itindex{core~dump} \textit{core dump} (vedi
@@ -1530,9 +1545,9 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
                               si potrà sempre inviare un segnale che non sia
                               già presente su una coda.\footnotemark\\
     \const{RLIMIT\_STACK}  &  La massima dimensione dello \itindex{stack}
-                              stack del 
-                              processo. Se il processo esegue operazioni che
-                              estendano lo stack oltre questa dimensione
+                              \textit{stack} del processo. Se il processo
+                              esegue operazioni che estendano lo
+                              \textit{stack} oltre questa dimensione 
                               riceverà un segnale di \const{SIGSEGV}.\\
     \const{RLIMIT\_RSS}    &  L'ammontare massimo di pagine di memoria dato al
                               \index{segmento!testo} testo del processo. Il
@@ -1556,6 +1571,9 @@ fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
 \footnotetext{il limite su questa risorsa è stato introdotto con il kernel
   2.6.8.}
 
+% aggiungere i limiti che mancano come RLIMIT_RTTIME introdotto con il 2.6.25
+% vedi file include/asm-generic/resource.h
+
 In generale il superamento di un limite corrente\footnote{di norma quanto
   riportato in tab.~\ref{tab:sys_rlimit_values} fa riferimento a quanto
   avviene al superamento del limite corrente, con l'eccezione
@@ -1583,8 +1601,8 @@ parte di un processo sono previste due funzioni, \funcd{getrlimit} e
   \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
     \begin{errlist}
-    \item[\errcode{EINVAL}] I valori per \param{resource} non sono validi.
-    \item[\errcode{EPERM}] Un processo senza i privilegi di amministratore ha
+    \item[\errcode{EINVAL}] i valori per \param{resource} non sono validi.
+    \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
     cercato di innalzare i propri limiti.
     \end{errlist}
   ed \errval{EFAULT}.}
@@ -1742,7 +1760,7 @@ prototipo 
     \begin{errlist}
     \item[\errcode{EACCESS}] non si hanno i permessi per accedere a
       \param{pathname}.
-    \item[\errcode{EPERM}] Il processo non ha privilegi sufficienti ad
+    \item[\errcode{EPERM}] il processo non ha privilegi sufficienti ad
       abilitare il \textit{BSD accounting}.
     \item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}.
     \item[\errcode{EUSER}] non sono disponibili nel kernel strutture per il
@@ -1771,9 +1789,9 @@ vengono salvate in formato binario, e corrispondono al contenuto della
 apposita struttura dati definita all'interno del kernel.
 
 Il funzionamento di \func{acct} viene inoltre modificato da uno specifico
-parametro di sistema, modificabile attraverso \file{/proc/sys/kernel/acct} (o
-tramite la corrispondente \func{sysctl}). Esso contiene tre valori interi, il
-primo indica la percentuale di spazio disco libero sopra il quale viene
+parametro di sistema, modificabile attraverso \procfile{/proc/sys/kernel/acct}
+(o tramite la corrispondente \func{sysctl}). Esso contiene tre valori interi,
+il primo indica la percentuale di spazio disco libero sopra il quale viene
 ripresa una registrazione che era stata sospesa per essere scesi sotto il
 minimo indicato dal secondo valore (sempre in percentuale di spazio disco
 libero). Infine l'ultimo valore indica la frequenza in secondi con cui deve
@@ -1811,18 +1829,19 @@ rispettivamente chiamati \itindend{calendar~time} \textit{calendar time} e
   le date di modifica dei file o quelle di avvio dei processi. Per memorizzare
   questo tempo è stato riservato il tipo primitivo \type{time\_t}.
 \item[\textit{process time}] \itindex{process~time} detto talvolta
-  \textsl{tempo di processore}.  Viene misurato in \textit{clock tick}. Un
-  tempo questo corrispondeva al numero di interruzioni effettuate dal timer di
-  sistema, adesso lo standard POSIX richiede che esso sia pari al valore della
-  costante \const{CLOCKS\_PER\_SEC}, che deve essere definita come 1000000,
-  qualunque sia la risoluzione reale dell'orologio di sistema e la frequenza
-  delle interruzioni del timer.\footnote{quest'ultima, come accennato in
-    sez.~\ref{sec:proc_hierarchy}, è invece data dalla costante \const{HZ}.}
-  Il dato primitivo usato per questo tempo è \type{clock\_t}, che ha quindi
-  una risoluzione del microsecondo. Il numero di tick al secondo può essere
-  ricavato anche attraverso \func{sysconf} (vedi sez.~\ref{sec:sys_sysconf}).
-  Il vecchio simbolo \const{CLK\_TCK} definito in \file{time.h} è ormai
-  considerato obsoleto.
+  \textsl{tempo di processore}.  Viene misurato in \itindex{clock~tick}
+  \textit{clock tick}. Un tempo questo corrispondeva al numero di interruzioni
+  effettuate dal timer di sistema, adesso lo standard POSIX richiede che esso
+  sia pari al valore della costante \const{CLOCKS\_PER\_SEC}, che deve essere
+  definita come 1000000, qualunque sia la risoluzione reale dell'orologio di
+  sistema e la frequenza delle interruzioni del timer.\footnote{quest'ultima,
+    come accennato in sez.~\ref{sec:proc_hierarchy}, è invece data dalla
+    costante \const{HZ}.}  Il dato primitivo usato per questo tempo è
+  \type{clock\_t}, che ha quindi una risoluzione del microsecondo. Il numero
+  di \itindex{clock~tick} \textit{tick} al secondo può essere ricavato anche
+  attraverso \func{sysconf} (vedi sez.~\ref{sec:sys_sysconf}).  Il vecchio
+  simbolo \const{CLK\_TCK} definito in \file{time.h} è ormai considerato
+  obsoleto.
 \end{basedescript}
 
 In genere si usa il \itindend{calendar~time} \textit{calendar time} per
@@ -1832,8 +1851,8 @@ demoni che compiono lavori amministrativi ad ore definite, come \cmd{cron}.
 
 Di solito questo tempo viene convertito automaticamente dal valore in UTC al
 tempo locale, utilizzando le opportune informazioni di localizzazione
-(specificate in \file{/etc/timezone}). E da tenere presente che questo tempo è
-mantenuto dal sistema e non è detto che corrisponda al tempo tenuto
+(specificate in \conffile{/etc/timezone}). E da tenere presente che questo
+tempo è mantenuto dal sistema e non è detto che corrisponda al tempo tenuto
 dall'orologio hardware del calcolatore.
 
 Anche il \itindex{process~time} \textit{process time} di solito si esprime in
@@ -1890,11 +1909,11 @@ utilizzato dallo stesso; il suo prototipo 
     caso di errore.}
 \end{prototype}
 
-La funzione restituisce il tempo in tick, quindi se si vuole il tempo in
-secondi occorre dividere il risultato per la costante
-\const{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C,
-  POSIX richiede che \const{CLOCKS\_PER\_SEC} sia definito pari a 1000000
-  indipendentemente dalla risoluzione del timer di sistema.} In genere
+La funzione restituisce il tempo in \itindex{clock~tick} \texttt{clock tick},
+quindi se si vuole il tempo in secondi occorre dividere il risultato per la
+costante \const{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard
+  ANSI C, POSIX richiede che \const{CLOCKS\_PER\_SEC} sia definito pari a
+  1000000 indipendentemente dalla risoluzione del timer di sistema.} In genere
 \type{clock\_t} viene rappresentato come intero a 32 bit, il che comporta un
 valore massimo corrispondente a circa 72 minuti, dopo i quali il contatore
 riprenderà lo stesso valore iniziale.
@@ -1906,8 +1925,9 @@ possono essere letti attraverso la funzione \funcd{times}, il cui prototipo 
 \begin{prototype}{sys/times.h}{clock\_t times(struct tms *buf)}
   Legge in \param{buf} il valore corrente dei tempi di processore.
   
-  \bodydesc{La funzione ritorna il numero di clock tick dall'avvio del sistema
-    in caso di successo e -1 in caso di errore.}
+  \bodydesc{La funzione ritorna il numero di \itindex{clock~tick}
+    \textit{clock tick} dall'avvio del sistema in caso di successo e -1 in
+    caso di errore.}
 \end{prototype}
 
 La funzione restituisce i valori di \textit{process time} del processo
@@ -2148,9 +2168,10 @@ campi della struttura \struct{timex} pu
                                            PLL implementato dal kernel,
                                            specificato nel campo
                                            \var{constant} di \struct{timex}.\\ 
-    \const{ADJ\_TICK}           & 0x4000 & Imposta il valore dei tick del timer
-                                           in microsecondi, espresso nel campo
-                                           \var{tick} di \struct{timex}.\\ 
+    \const{ADJ\_TICK}           & 0x4000 & Imposta il valore dei \textit{tick}
+                                           \itindex{clock~tick} del timer in
+                                           microsecondi, espresso nel campo
+                                           \var{tick} di \struct{timex}.\\  
     \const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum 
                                            dell'orologio secondo il valore del
                                            campo \var{offset} simulando il
@@ -2268,11 +2289,11 @@ stringa, allocata staticamente, nella forma:
 e impostano anche la variabile \var{tzname} con l'informazione della
 \textit{time zone} corrente; \func{ctime} è banalmente definita in termini di
 \func{asctime} come \code{asctime(localtime(t)}. Dato che l'uso di una stringa
-statica rende le funzioni non rientranti POSIX.1c e SUSv2 prevedono due
-sostitute rientranti, il cui nome è al solito ottenuto aggiungendo un
-\code{\_r}, che prendono un secondo argomento \code{char *buf}, in cui
-l'utente deve specificare il buffer su cui la stringa deve essere copiata
-(deve essere di almeno 26 caratteri).
+statica rende le funzioni non \index{funzioni!rientranti} rientranti POSIX.1c
+e SUSv2 prevedono due sostitute \index{funzioni!rientranti} rientranti, il cui
+nome è al solito ottenuto aggiungendo un \code{\_r}, che prendono un secondo
+argomento \code{char *buf}, in cui l'utente deve specificare il buffer su cui
+la stringa deve essere copiata (deve essere di almeno 26 caratteri).
 
 Le altre tre funzioni, \func{gmtime}, \func{localtime} e \func{mktime} servono
 per convertire il tempo dal formato \type{time\_t} a quello di \struct{tm} e
@@ -2282,9 +2303,10 @@ locale; \func{mktime} esegue la conversione inversa.
 
 Anche in questo caso le prime due funzioni restituiscono l'indirizzo di una
 struttura allocata staticamente, per questo sono state definite anche altre
-due versioni rientranti (con la solita estensione \code{\_r}), che prevedono
-un secondo argomento \code{struct tm *result}, fornito dal chiamante, che deve
-preallocare la struttura su cui sarà restituita la conversione.
+due versioni \index{funzioni!rientranti} rientranti (con la solita estensione
+\code{\_r}), che prevedono un secondo argomento \code{struct tm *result},
+fornito dal chiamante, che deve preallocare la struttura su cui sarà
+restituita la conversione.
 
 Come mostrato in fig.~\ref{fig:sys_tm_struct} il \textit{broken-down time}
 permette di tenere conto anche della differenza fra tempo universale e ora
@@ -2303,7 +2325,7 @@ funzione \funcd{tzset}, il cui prototipo 
 
 La funzione inizializza le variabili di fig.~\ref{fig:sys_tzname} a partire dal
 valore della variabile di ambiente \const{TZ}, se quest'ultima non è definita
-verrà usato il file \file{/etc/localtime}.
+verrà usato il file \conffile{/etc/localtime}.
 
 \begin{figure}[!htb]
   \footnotesize
@@ -2412,7 +2434,7 @@ un errore nell'esecuzione di una funzione, ma di norma questo viene riportato
 semplicemente usando un opportuno valore di ritorno della funzione invocata.
 Inoltre il sistema di classificazione degli errori è basato sull'architettura
 a processi, e presenta una serie di problemi nel caso lo si debba usare con i
-thread.
+\itindex{thread} \textit{thread}.
 
 
 \subsection{La variabile \var{errno}}
@@ -2429,11 +2451,12 @@ costante \val{EOF} (a seconda della funzione); ma questo valore segnala solo
 che c'è stato un errore, non il tipo di errore.
 
 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{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
+\var{errno},\footnote{l'uso di una variabile globale può comportare alcuni
+  problemi (ad esempio nel caso dei \itindex{thread} \textit{thread}) ma lo
+  standard ISO C consente 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
+  \itindex{thread} \textit{thread}.}  definita nell'header \file{errno.h}; la
 variabile è in genere definita come \direct{volatile} dato che può essere
 cambiata in modo asincrono da un segnale (si veda sez.~\ref{sec:sig_sigchld}
 per un esempio, ricordando quanto trattato in sez.~\ref{sec:proc_race_cond}),
@@ -2493,13 +2516,14 @@ La funzione utilizza una stringa statica che non deve essere modificata dal
 programma; essa è utilizzabile solo fino ad una chiamata successiva a
 \func{strerror} o \func{perror}, nessun'altra funzione di libreria tocca
 questa stringa. In ogni caso l'uso di una stringa statica rende la funzione
-non rientrante, per cui nel caso si usino i thread le librerie
-forniscono\footnote{questa funzione è la versione prevista dalle \acr{glibc},
-  ed effettivamente definita in \file{string.h}, ne esiste una analoga nello
-  standard SUSv3 (quella riportata dalla pagina di manuale), che restituisce
-  \code{int} al posto di \code{char *}, e che tronca la stringa restituita a
-  \param{size}.}  una apposita versione rientrante \func{strerror\_r}, il cui
-prototipo è:
+non \index{funzioni!rientranti} rientrante, per cui nel caso si usino i
+\itindex{thread} \textit{thread} le librerie forniscono\footnote{questa
+  funzione è la versione prevista dalle \acr{glibc}, ed effettivamente
+  definita in \file{string.h}, ne esiste una analoga nello standard SUSv3
+  (quella riportata dalla pagina di manuale), che restituisce \code{int} al
+  posto di \code{char *}, e che tronca la stringa restituita a
+  \param{size}.}  una apposita versione \index{funzioni!rientranti} rientrante
+\func{strerror\_r}, il cui prototipo è:
 \begin{prototype}{string.h}
   {char * strerror\_r(int errnum, char *buf, size\_t size)} 
   
@@ -2519,9 +2543,10 @@ prototipo 
 \noindent
 
 La funzione è analoga a \func{strerror} ma restituisce la stringa di errore
-nel buffer \param{buf} che il singolo thread deve allocare autonomamente per
-evitare i problemi connessi alla condivisione del buffer statico. Il messaggio
-è copiato fino alla dimensione massima del buffer, specificata dall'argomento
+nel buffer \param{buf} che il singolo \itindex{thread} \textit{thread} deve
+allocare autonomamente per evitare i problemi connessi alla condivisione del
+buffer statico. Il messaggio è copiato fino alla dimensione massima del
+buffer, specificata dall'argomento
 \param{size}, che deve comprendere pure il carattere di terminazione;
 altrimenti la stringa viene troncata.
 
@@ -2691,7 +2716,7 @@ che errori relativi alla stessa linea non vengano ripetuti.
 % LocalWords:  strftime thread EOF modifiable lvalue app errcode strerror LC at
 % LocalWords:  perror string errnum MESSAGES error message ErrCode strtol log
 % LocalWords:  program invocation argv printf print progname exit count fname
-% LocalWords:  lineno one standardese Di
+% LocalWords:  lineno one standardese Di page Wed Wednesday Apr April PM AM
 
 
 
@@ -2699,3 +2724,4 @@ che errori relativi alla stessa linea non vengano ripetuti.
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  CEST