Aggiornamento note di copyright
[gapil.git] / system.tex
index 81425465be387989b4ca298ce5db2a2fd0847d20..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,
@@ -707,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},
@@ -796,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
@@ -1017,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} 
   
@@ -1050,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} 
@@ -1113,19 +1116,23 @@ file di \textsl{registro} di utenti e gruppi, con il formato classico di
     \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 \conffile{/etc/passwd}.\\
-    \func{getpwent\_r} & Come la precedente, ma rientrante.\\
+    \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 \conffile{/etc/group}.\\ 
-    \func{getgrent\_r} & Come la precedente, ma rientrante.\\
+    \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
@@ -1327,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
@@ -1437,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}
@@ -1473,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
@@ -1535,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
@@ -1561,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
@@ -1588,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}.}
@@ -1747,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
@@ -1816,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
@@ -1895,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.
@@ -1911,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
@@ -2153,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
@@ -2273,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
@@ -2287,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
@@ -2417,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}}
@@ -2434,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}),
@@ -2498,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)} 
   
@@ -2524,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.
 
@@ -2696,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
 
 
 
@@ -2704,3 +2724,4 @@ che errori relativi alla stessa linea non vengano ripetuti.
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  CEST