Altre indicizzazioni e recupero dei pezzi tagliati per sbaglio
[gapil.git] / system.tex
index 68848c178adbe0f3d441ab49fff007b08bf0daf6..ca0510985e39fdad1f8b623e0fa648a8e47ada13 100644 (file)
@@ -344,11 +344,9 @@ relative spiegazioni, si può trovare nel manuale delle \acr{glibc}.
                                   Valore massimo del tipo di dato
                                   \type{ssize\_t}.\\ 
       \texttt{\_SC\_CLK\_TCK}   & \const{CLK\_TCK} &
-                                  Il numero di \itindex{clock~tick}
-                                  \textit{clock tick} al secondo, 
+                                  Il numero di \textit{clock tick} al secondo, 
                                   cioè l'unità di misura del
-                                  \itindex{process~time} \textit{process
-                                    time} (vedi
+                                  \textit{process time} (vedi
                                   sez.~\ref{sec:sys_unix_time}).\\  
       \texttt{\_SC\_JOB\_CONTROL}&\macro{\_POSIX\_JOB\_CONTROL}&
                                   Indica se è supportato il \textit{job
@@ -409,7 +407,7 @@ riportate in tab.~\ref{tab:sys_file_macro}.
     \const{LINK\_MAX}   &8  & Numero massimo di link a un file.\\
     \const{NAME\_MAX}&  14  & Lunghezza in byte di un nome di file. \\
     \const{PATH\_MAX}& 256  & Lunghezza in byte di un \textit{pathname}.\\
-    \const{PIPE\_BUF}&4096  & Byte scrivibili atomicamente in una pipe
+    \const{PIPE\_BUF}&4096  & Byte scrivibili atomicamente in una \textit{pipe}
                               (vedi sez.~\ref{sec:ipc_pipes}).\\
     \const{MAX\_CANON}&255  & Dimensione di una riga di terminale in modo 
                               canonico (vedi sez.~\ref{sec:term_io_design}).\\
@@ -441,7 +439,7 @@ analoghe di tab.~\ref{tab:sys_posix1_general}.
     \const{\_POSIX\_PATH\_MAX}& 256  & Lunghezza in byte di un 
                                        \textit{pathname}.\\
     \const{\_POSIX\_PIPE\_BUF}& 512  & Byte scrivibili atomicamente in una
-                                       pipe.\\
+                                       \textit{pipe}.\\
     \const{\_POSIX\_MAX\_CANON}&255  & Dimensione di una riga di
                                        terminale in modo canonico.\\
     \const{\_POSIX\_MAX\_INPUT}&255  & Spazio disponibile nella coda di input 
@@ -776,9 +774,9 @@ La struttura usata da entrambe le funzioni è allocata staticamente, per questo
 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 \index{funzioni!rientranti} rientranti; per questo motivo ne esistono
-anche due versioni alternative (denotate dalla solita estensione \code{\_r}),
-i cui prototipi sono:
+essere rientranti; per questo motivo ne esistono anche due versioni
+alternative (denotate dalla solita estensione \code{\_r}), i cui prototipi
+sono:
 
 \begin{funcproto}{
 \fhead{pwd.h} 
@@ -838,8 +836,8 @@ i loro prototipi sono:
 \end{funcproto}
 
 Come per le precedenti per gli utenti esistono anche le analoghe versioni
-\index{funzioni!rientranti} rientranti che di nuovo utilizzano la stessa
-estensione \code{\_r}; i loro prototipi sono:
+rientranti che di nuovo utilizzano la stessa estensione \code{\_r}; i loro
+prototipi sono:
 
 \begin{funcproto}{
 \fhead{grp.h}
@@ -900,23 +898,19 @@ di utenti e gruppi, con il formato classico di \conffile{/etc/passwd} e
     \hline
     \funcm{fgetpwent}   & Legge una voce dal file di registro degli utenti
                           specificato.\\
-    \funcm{fgetpwent\_r}& Come la precedente, ma \index{funzioni!rientranti}
-                          rientrante.\\ 
+    \funcm{fgetpwent\_r}& Come la precedente, ma rientrante.\\ 
     \funcm{putpwent}    & Immette una voce in un file di registro degli
                           utenti.\\ 
     \funcm{getpwent}    & Legge una voce da \conffile{/etc/passwd}.\\
-    \funcm{getpwent\_r} & Come la precedente, ma \index{funzioni!rientranti}
-                          rientrante.\\ 
+    \funcm{getpwent\_r} & Come la precedente, ma rientrante.\\ 
     \funcm{setpwent}    & Ritorna all'inizio di \conffile{/etc/passwd}.\\
     \funcm{endpwent}    & Chiude \conffile{/etc/passwd}.\\
     \funcm{fgetgrent}   & Legge una voce dal file di registro dei gruppi 
                          specificato.\\
-    \funcm{fgetgrent\_r}& Come la precedente, ma \index{funzioni!rientranti}
-                          rientrante.\\
+    \funcm{fgetgrent\_r}& Come la precedente, ma rientrante.\\
     \funcm{putgrent}    & Immette una voce in un file di registro dei gruppi.\\
     \funcm{getgrent}    & Legge una voce da \conffile{/etc/group}.\\ 
-    \funcm{getgrent\_r} & Come la precedente, ma \index{funzioni!rientranti} 
-                          rientrante.\\
+    \funcm{getgrent\_r} & Come la precedente, ma rientrante.\\
     \funcm{setgrent}    & Ritorna all'inizio di \conffile{/etc/group}.\\
     \funcm{endgrent}    & Chiude \conffile{/etc/group}.\\
     \hline
@@ -1134,11 +1128,10 @@ hanno lo stesso identico comportamento. Per completezza viene definita anche
 
 Come già visto in sez.~\ref{sec:sys_user_group}, l'uso di strutture allocate
 staticamente rende le funzioni di lettura dei dati appena illustrate 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, i rispettivi prototipi sono:
+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, i rispettivi prototipi sono:
 
 \begin{funcproto}{
 \fhead{utmp.h}
@@ -1158,10 +1151,9 @@ aggiuntivi, i rispettivi prototipi sono:
 \end{funcproto}
 
 Le funzioni si comportano esattamente come le precedenti analoghe non
-\index{funzioni!rientranti} rientranti, solo che restituiscono il risultato
-all'indirizzo specificato dal primo argomento aggiuntivo \param{buffer} mentre
-il secondo, \param{result)} viene usato per restituire il puntatore al buffer
-stesso.
+rientranti, solo che restituiscono il risultato all'indirizzo specificato dal
+primo argomento aggiuntivo \param{buffer} mentre il secondo, \param{result)}
+viene usato per restituire il puntatore al buffer stesso.
 
 Infine le \acr{glibc} forniscono altre due funzioni, \funcd{updwtmp} e
 \funcd{logwtmp}, come estensione per scrivere direttamente delle voci nel file
@@ -1594,8 +1586,7 @@ specifico segnale o il fallimento della \textit{system call} che lo ha
 provocato. A questo comportamento generico fanno eccezione \const{RLIMIT\_CPU}
 in cui si ha in comportamento diverso per il superamento dei due limiti e
 \const{RLIMIT\_CORE} che influenza soltanto la dimensione o l'eventuale
-creazione dei file di \itindex{core~dump} \textit{core dump} (vedi
-sez.~\ref{sec:sig_standard}).
+creazione dei file di \textit{core dump} (vedi sez.~\ref{sec:sig_standard}).
 
 Per permettere di leggere e di impostare i limiti di utilizzo delle risorse da
 parte di un processo sono previste due funzioni di sistema, \funcd{getrlimit}
@@ -1667,19 +1658,18 @@ riportati nel seguente elenco:
   \textit{Address Space}, (vedi sez.~\ref{sec:proc_mem_gen}). Se il limite
   viene superato dall'uso di funzioni come \func{brk}, \func{mremap} o
   \func{mmap} esse falliranno con un errore di \errcode{ENOMEM}, mentre se il
-  superamento viene causato dalla crescita dello \itindex{stack}
-  \textit{stack} il processo riceverà un segnale di \signal{SIGSEGV}. Dato che
-  il valore usato è un intero di tipo \ctyp{long} nelle macchine a 32 bit
-  questo può assumere un valore massimo di 2Gb (anche se la memoria
-  disponibile può essere maggiore), in tal caso il limite massimo indicabile
-  resta 2Gb, altrimenti la risorsa si dà per non limitata.
+  superamento viene causato dalla crescita dello \textit{stack} il processo
+  riceverà un segnale di \signal{SIGSEGV}. Dato che il valore usato è un
+  intero di tipo \ctyp{long} nelle macchine a 32 bit questo può assumere un
+  valore massimo di 2Gb (anche se la memoria disponibile può essere maggiore),
+  in tal caso il limite massimo indicabile resta 2Gb, altrimenti la risorsa si
+  dà per non limitata.
 
 \item[\const{RLIMIT\_CORE}] Questa risorsa indica, in byte, la massima
-  dimensione per un file di \itindex{core~dump} \textit{core dump} (vedi
+  dimensione per un file di \textit{core dump} (vedi
   sez.~\ref{sec:sig_standard}) creato nella terminazione di un processo. File
   di dimensioni maggiori verranno troncati a questo valore, mentre con un
-  valore nullo si bloccherà la creazione dei \itindex{core~dump} \textit{core
-    dump}.
+  valore nullo si bloccherà la creazione dei \textit{core dump}.
 
 \item[\const{RLIMIT\_CPU}] Questa risorsa indica, in secondi, il massimo tempo
   di CPU (vedi sez.~\ref{sec:sys_cpu_times}) che il processo può usare. Il
@@ -1697,7 +1687,7 @@ riportati nel seguente elenco:
   processo con la prima ricezione.
 
 \item[\const{RLIMIT\_DATA}] Questa risorsa indica, in byte, la massima
-  dimensione del \index{segmento!dati} segmento dati di un processo (vedi
+  dimensione del segmento dati di un processo (vedi
   sez.~\ref{sec:proc_mem_layout}).  Il tentativo di allocare più memoria di
   quanto indicato dal limite corrente causa il fallimento della funzione di
   allocazione eseguita (\func{brk} o \func{sbrk}) con un errore di
@@ -1718,14 +1708,13 @@ riportati nel seguente elenco:
 
 \item[\const{RLIMIT\_MEMLOCK}] Questa risorsa indica, in byte, l'ammontare
   massimo di memoria che può essere bloccata in RAM da un processo (vedi
-  sez.~\ref{sec:proc_mem_lock}). Dato che il \itindex{memory~locking}
-  \textit{memory locking} viene effettuato sulle pagine di memoria, il valore
-  indicato viene automaticamente arrotondato al primo multiplo successivo
-  della dimensione di una pagina di memoria. Il limite comporta il fallimento
-  delle \textit{system call} che eseguono il \textit{memory locking}
-  (\func{mlock}, \func{mlockall} ed anche, vedi
-  sez.~\ref{sec:file_memory_map}, \func{mmap} con l'operazione
-  \const{MAP\_LOCKED}). 
+  sez.~\ref{sec:proc_mem_lock}). Dato che il \textit{memory locking} viene
+  effettuato sulle pagine di memoria, il valore indicato viene automaticamente
+  arrotondato al primo multiplo successivo della dimensione di una pagina di
+  memoria. Il limite comporta il fallimento delle \textit{system call} che
+  eseguono il \textit{memory locking} (\func{mlock}, \func{mlockall} ed anche,
+  vedi sez.~\ref{sec:file_memory_map}, \func{mmap} con l'operazione
+  \const{MAP\_LOCKED}).
 
   Dal kernel 2.6.9 questo limite comprende anche la memoria che può essere
   bloccata da ciascun utente nell'uso della memoria condivisa (vedi
@@ -1771,10 +1760,10 @@ messaggi vuoti che comunque richiede delle risorse di gestione. Questa risorsa
   \itindex{Resident~Set~Size~(RSS)} \textit{Resident Set Size}) cioè
   l'ammontare della memoria associata al processo che risiede effettivamente
   in RAM e non a quella eventualmente portata sulla \textit{swap} o non ancora
-  caricata dal filesystem per il \index{segmento!testo} segmento testo del
-  programma.  Ha effetto solo sulle chiamate a \func{madvise} con
-  \const{MADV\_WILLNEED} (vedi sez.~\ref{sec:file_memory_map}). Presente solo
-  sui i kernel precedenti il 2.4.30.
+  caricata dal filesystem per il segmento testo del programma.  Ha effetto
+  solo sulle chiamate a \func{madvise} con \const{MADV\_WILLNEED} (vedi
+  sez.~\ref{sec:file_memory_map}). Presente solo sui i kernel precedenti il
+  2.4.30.
 
 \item[\const{RLIMIT\_RTPRIO}] Questa risorsa indica il valore massimo della
   priorità statica che un processo può assegnarsi o assegnare con
@@ -1804,9 +1793,9 @@ messaggi vuoti che comunque richiede delle risorse di gestione. Questa risorsa
   introdotto con il kernel 2.6.8.
 
 \item[\const{RLIMIT\_STACK}] Questa risorsa indica, in byte, la massima
-  dimensione dello \itindex{stack} \textit{stack} del processo. Se il processo
-  esegue operazioni che estendano lo \textit{stack} oltre questa dimensione
-  riceverà un segnale di \signal{SIGSEGV}. 
+  dimensione dello \textit{stack} del processo. Se il processo esegue
+  operazioni che estendano lo \textit{stack} oltre questa dimensione riceverà
+  un segnale di \signal{SIGSEGV}.
 
   A partire dal kernel 2.6.23 questo stesso limite viene applicato per la gran
   parte delle architetture anche ai dati che possono essere passati come
@@ -2141,29 +2130,31 @@ infatti calcola tre tempi:
 \end{basedescript}
 
 La somma di \textit{user time} e \textit{system time} indica il
-\itindex{process~time} \textit{process time}, vale a dire il tempo di
-processore totale che il sistema ha effettivamente utilizzato per eseguire il
-programma di un certo processo. Si può ottenere un riassunto dei valori di
-questi tempi quando si esegue un qualsiasi programma lanciando quest'ultimo
-come argomento del comando \cmd{time}.
-
-Come accennato il \itindex{process~time} \textit{process time} viene misurato
-nei cosiddetti \itindex{clock~tick} \textit{clock tick}. Un tempo questo
-corrispondeva al numero di interruzioni effettuate dal timer di sistema, oggi
-lo standard POSIX richiede che esso sia espresso come multiplo 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 che, come accennato in sez.~\ref{sec:proc_hierarchy} e
-come vedremo a breve, è invece data dalla costante \const{HZ}.
+\textit{process time}, vale a dire il tempo di processore totale che il
+sistema ha effettivamente utilizzato per eseguire il programma di un certo
+processo. Si può ottenere un riassunto dei valori di questi tempi quando si
+esegue un qualsiasi programma lanciando quest'ultimo come argomento del
+comando \cmd{time}.
+
+\itindbeg{clock~tick}
+
+Come accennato il \textit{process time} viene misurato nei cosiddetti
+\textit{clock tick}. Un tempo questo corrispondeva al numero di interruzioni
+effettuate dal timer di sistema, oggi lo standard POSIX richiede che esso sia
+espresso come multiplo 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 che, come accennato in
+sez.~\ref{sec:proc_hierarchy} e come vedremo a breve, è invece data dalla
+costante \const{HZ}.
 
 Il tipo di dato usato per questo tempo, \type{clock\_t}, con questa
 convenzione ha una risoluzione del microsecondo. Ma non tutte le funzioni di
 sistema come vedremo seguono questa convenzione, in tal caso il numero di
-\itindex{clock~tick} \textit{clock tick} al secondo può essere ricavato anche
-attraverso \func{sysconf} richiedendo il valore della costante
-\const{\_SC\_CLK\_TCK} (vedi sez.~\ref{sec:sys_limits}).  Il vecchio simbolo
-\const{CLK\_TCK} definito in \headfile{time.h} è ormai considerato obsoleto e
-non deve essere usato.
+\textit{clock tick} al secondo può essere ricavato anche attraverso
+\func{sysconf} richiedendo il valore della costante \const{\_SC\_CLK\_TCK}
+(vedi sez.~\ref{sec:sys_limits}).  Il vecchio simbolo \const{CLK\_TCK}
+definito in \headfile{time.h} è ormai considerato obsoleto e non deve essere
+usato.
 
 In realtà tutti calcoli dei tempi vengono effettuati dal kernel per il
 cosiddetto \textit{software clock}, utilizzando il \textit{timer di sistema} e
@@ -2179,9 +2170,9 @@ le architetture, ma dal 2.6.13 il valore è diventato una opzione di
 compilazione del kernel, con un default di 250 e valori possibili di 100, 250,
 1000. Dal 2.6.20 è stato aggiunto anche il valore 300 che è divisibile per le
 frequenze di refresh della televisione (50 o 60 Hz). Si può pensare che questi
-valori determinino anche la corrispondente durata dei \itindex{clock~tick}
-\textit{clock tick}, ma in realtà questa granularità viene calcolata in
-maniera indipendente usando la costante del kernel \const{USER\_HZ}.
+valori determinino anche la corrispondente durata dei \textit{clock tick}, ma
+in realtà questa granularità viene calcolata in maniera indipendente usando la
+costante del kernel \const{USER\_HZ}.
 
 Fino al kernel 2.6.21 la durata di un \textit{jiffy} costituiva la risoluzione
 massima ottenibile nella misura dei tempi impiegabile in una \textit{system
@@ -2191,6 +2182,7 @@ divenuto possibile ottenere, per le funzioni di attesa ed i timer, la massima
 risoluzione possibile fornita dall'hardware. Torneremo su questo in
 sez.~\ref{sec:sig_timer_adv}.
 
+\itindend{clock~tick}
 
 
 \subsection{La gestione del \textit{process time}}
@@ -2221,12 +2213,12 @@ utilizzato dallo stesso; il suo prototipo è:
   \var{errno} non viene usata.}  
 \end{funcproto}
 
-La funzione restituisce il tempo in \itindex{clock~tick} \textit{clock tick}
-ma la \acr{glibc} segue lo standard POSIX e quindi se si vuole il tempo in
-secondi occorre dividere il risultato per la costante
-\const{CLOCKS\_PER\_SEC}. 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.
+La funzione restituisce il tempo in \textit{clock tick} ma la \acr{glibc}
+segue lo standard POSIX e quindi se si vuole il tempo in secondi occorre
+dividere il risultato per la costante \const{CLOCKS\_PER\_SEC}. 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.
 
 La funzione è presente anche nello standard ANSI C, ma in tal caso non è
 previsto che il valore ritornato indichi un intervallo di tempo ma solo un
@@ -2303,7 +2295,7 @@ il comportamento è stato adeguato allo standard a partire dalla versione
 2.6.9.
 
 A differenza di quanto avviene per \func{clock} i valori restituiti nei campi
-di una struttura \struct{tms} sono misurati in numero di \itindex{clock~tick}
+di una struttura \struct{tms} sono misurati in numero di 
 \textit{clock tick} effettivi e non in multipli di \const{CLOCKS\_PER\_SEC},
 pertanto per ottenere il valore effettivo in secondi occorrerà dividere per il
 risultato di \code{sysconf(\_SC\_CLK\_TCK)}.
@@ -2315,12 +2307,12 @@ versioni del kernel. Fino al kernel 2.4 si faceva infatti riferimento al
 momento dell'avvio del kernel. Con il kernel 2.6 si fa riferimento a
 $2^{32}/\mathtt{HZ}-300$ secondi prima dell'avvio. 
 
-Considerato che il numero dei \itindex{clock~tick} \textit{clock tick} per un
-kernel che è attivo da molto tempo può eccedere le dimensioni per il tipo
-\type{clock\_t} il comportamento più opportuno per i programmi è di ignorare
-comunque il valore di ritorno della funzione e ricorrere alle funzioni per il
-tempo di calendario del prossimo paragrafo qualora si voglia calcolare il
-tempo effettivamente trascorso dall'inizio del programma.
+Considerato che il numero dei \textit{clock tick} per un kernel che è attivo
+da molto tempo può eccedere le dimensioni per il tipo \type{clock\_t} il
+comportamento più opportuno per i programmi è di ignorare comunque il valore
+di ritorno della funzione e ricorrere alle funzioni per il tempo di calendario
+del prossimo paragrafo qualora si voglia calcolare il tempo effettivamente
+trascorso dall'inizio del programma.
 
 Infine si tenga presente che per dei limiti nelle convenzioni per il ritorno
 dei valori delle \textit{system call} su alcune architetture hardware (ed in
@@ -2593,7 +2585,7 @@ riportate in tab.~\ref{tab:sys_timex_mode}.
                                            specificato nel campo
                                            \var{constant} di \struct{timex}.\\ 
     \const{ADJ\_TICK}           & 0x4000 & Imposta il valore dei \textit{tick}
-                                           \itindex{clock~tick} del timer in
+                                           del timer in
                                            microsecondi, espresso nel campo
                                            \var{tick} di \struct{timex}.\\  
     \const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Chiede uno spostamento una tantum 
@@ -2723,9 +2715,8 @@ a \func{tzset} (che vedremo a breve), in modo che la data espressa tenga conto
 del fuso orario. In realtà \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
-\index{funzioni!rientranti} rientranti POSIX.1c e SUSv2 prevedono due
-sostitute \index{funzioni!rientranti} rientranti, il cui nome è al solito
+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).
@@ -2762,12 +2753,11 @@ effettua una chiamata preventiva a \func{tzset}.
 
 Anche in questo caso le due funzioni restituiscono l'indirizzo di una
 struttura allocata staticamente, per questo sono state definite anche altre
-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. La versione rientrante di \func{localtime} però non
-effettua la chiamata preventiva a \func{tzset} che deve essere eseguita a cura
-dell'utente. 
+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. La versione
+rientrante di \func{localtime} però non effettua la chiamata preventiva a
+\func{tzset} che deve essere eseguita a cura dell'utente.
 
 Infine \func{mktime} esegue la conversione di un \textit{broken-down time} a
 partire da una struttura \struct{tm} restituendo direttamente un valore di
@@ -2783,12 +2773,11 @@ informazioni relative al proprio fuso orario per determinare lo stato dell'ora
 legale.  
 
 La funzione inoltre modifica i valori della struttura \struct{tm} in forma di
-\itindex{value~result~argument} \textit{value result argument}, normalizzando
-i valori dei vari campi, impostando i valori risultanti per \var{tm\_wday} e
-\var{tm\_yday} e assegnando a \var{tm\_isdst} il valore (positivo o nullo)
-corrispondente allo stato dell'ora legale. La funzione inoltre provvede ad
-impostare il valore della \index{variabili!globali} variabile globale
-\var{tzname}.
+\textit{value result argument}, normalizzando i valori dei vari campi,
+impostando i valori risultanti per \var{tm\_wday} e \var{tm\_yday} e
+assegnando a \var{tm\_isdst} il valore (positivo o nullo) corrispondente allo
+stato dell'ora legale. La funzione inoltre provvede ad impostare il valore
+della variabile globale \var{tzname}.
 
 \itindend{calendar~time}
 
@@ -2799,8 +2788,8 @@ impostare il valore della \index{variabili!globali} variabile globale
     \includestruct{listati/time_zone_var.c}
   \end{minipage} 
   \normalsize 
-  \caption{Le \index{variabili!globali} variabili globali usate per la
-    gestione delle \itindex{timezone} \textit{timezone}.}
+  \caption{Le variabili globali usate per la gestione delle \itindex{timezone}
+    \textit{timezone}.}
   \label{fig:sys_tzname}
 \end{figure}
 
@@ -2808,12 +2797,11 @@ Come accennato l'uso del \textit{broken-down time} permette di tenere conto
 anche della differenza fra tempo universale e ora locale, compresa l'eventuale
 ora legale.  Questo viene fatto dalle funzioni di conversione grazie alle
 informazioni riguardo la propria \itindex{timezone} \textit{timezone}
-mantenute nelle tre \index{variabili!globali} variabili globali mostrate in
-fig.~\ref{fig:sys_tzname}, cui si si può accedere direttamente includendo
-\headfile{time.h}. Come illustrato queste variabili vengono impostate
-internamente da alcune delle delle precedenti funzioni di conversione, ma lo
-si può fare esplicitamente chiamando direttamente la funzione \funcd{tzset},
-il cui prototipo è:
+mantenute nelle tre variabili globali mostrate in fig.~\ref{fig:sys_tzname},
+cui si si può accedere direttamente includendo \headfile{time.h}. Come
+illustrato queste variabili vengono impostate internamente da alcune delle
+delle precedenti funzioni di conversione, ma lo si può fare esplicitamente
+chiamando direttamente la funzione \funcd{tzset}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{sys/timex.h}
@@ -2975,13 +2963,13 @@ c'è stato un errore. Di solito questo valore, a seconda della funzione, è $-1$
 o un puntatore nullo o la costante \val{EOF}; ma questo valore segnala solo
 che c'è stato un errore, e non il tipo di errore.
 
-Per riportare il tipo di errore il sistema usa \index{variabili!globali} la
-variabile globale \var{errno}, definita nell'header \headfile{errno.h}.  Come
-accennato l'uso di una variabile globale può comportare problemi nel caso dei
-\itindex{thread} \textit{thread}, ma lo standard ISO C consente anche di
-definire \var{errno} come un cosiddetto ``\textit{modifiable lvalue}'', cosa
-che consente di usare anche una macro, e questo è infatti il metodo usato da
-Linux per renderla locale ai singoli \itindex{thread} \textit{thread}.
+Per riportare il tipo di errore il sistema usa la variabile globale
+\var{errno}, definita nell'header \headfile{errno.h}.  Come accennato l'uso di
+una variabile globale può comportare problemi nel caso dei \itindex{thread}
+\textit{thread}, ma lo standard ISO C consente anche di definire \var{errno}
+come un cosiddetto ``\textit{modifiable lvalue}'', cosa che consente di usare
+anche una macro, e questo è infatti il metodo usato da Linux per renderla
+locale ai singoli \itindex{thread} \textit{thread}.
 
 La variabile è in genere definita come \direct{volatile} dato che può essere
 cambiata in modo asincrono da un segnale, per un esempio si veda
@@ -3054,10 +3042,9 @@ La funzione \func{strerror} 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} e nessun'altra funzione di
 libreria tocca questa stringa. In ogni caso l'uso di una stringa statica rende
-la funzione non \index{funzioni!rientranti} rientrante, per cui nel caso si
-usino i \itindex{thread} \textit{thread} la \acr{glibc} fornisce una apposita
-versione \index{funzioni!rientranti} rientrante \funcd{strerror\_r}, il cui
-prototipo è:
+la funzione non rientrante, per cui nel caso si usino i \itindex{thread}
+\textit{thread} la \acr{glibc} fornisce una apposita versione rientrante
+\funcd{strerror\_r}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{string.h}
@@ -3110,7 +3097,7 @@ riferiscono all'ultimo errore avvenuto. La stringa specificata con
 personalizzazione (ad esempio l'indicazione del contesto in cui si è
 verificato), seguita dai due punti e da uno spazio, il messaggio è terminato
 con un a capo.  Il messaggio può essere riportato anche usando le due
-\index{variabili!globali} variabili globali:
+variabili globali:
 \includecodesnip{listati/errlist.c} 
 dichiarate in \headfile{errno.h}. La prima contiene i puntatori alle stringhe
 di errore indicizzati da \var{errno}; la seconda esprime il valore più alto
@@ -3185,12 +3172,11 @@ sez.~\ref{sec:file_formatted_io}), ed i relativi argomenti devono essere
 forniti allo stesso modo, mentre \param{errnum} indica l'errore che si vuole
 segnalare (non viene quindi usato il valore corrente di \var{errno}).
 
-La funzione stampa sullo \itindex{standard~error} \textit{standard error} il
-nome del programma, come indicato dalla \index{variabili!globali} variabile
-globale \var{program\_name}, seguito da due punti ed uno spazio, poi dalla
-stringa generata da \param{format} e dagli argomenti seguenti, seguita da due
-punti ed uno spazio infine il messaggio di errore relativo ad \param{errnum},
-il tutto è terminato da un a capo.
+La funzione stampa sullo \textit{standard error} il nome del programma, come
+indicato dalla variabile globale \var{program\_name}, seguito da due punti ed
+uno spazio, poi dalla stringa generata da \param{format} e dagli argomenti
+seguenti, seguita da due punti ed uno spazio infine il messaggio di errore
+relativo ad \param{errnum}, il tutto è terminato da un a capo.
 
 Il comportamento della funzione può essere ulteriormente controllato se si
 definisce una variabile \var{error\_print\_progname} come puntatore ad una
@@ -3201,8 +3187,8 @@ L'argomento \param{status} può essere usato per terminare direttamente il
 programma in caso di errore, nel qual caso \func{error} dopo la stampa del
 messaggio di errore chiama \func{exit} con questo stato di uscita. Se invece
 il valore è nullo \func{error} ritorna normalmente ma viene incrementata
-un'altra \index{variabili!globali} variabile globale,
-\var{error\_message\_count}, che tiene conto di quanti errori ci sono stati.
+un'altra variabile globale, \var{error\_message\_count}, che tiene conto di
+quanti errori ci sono stati.
 
 Un'altra funzione per la stampa degli errori, ancora più sofisticata, che
 prende due argomenti aggiuntivi per indicare linea e file su cui è avvenuto
@@ -3222,10 +3208,9 @@ l'errore è \funcd{error\_at\_line}; il suo prototipo è:
 \noindent ed il suo comportamento è identico a quello di \func{error} se non
 per il fatto che, separati con il solito due punti-spazio, vengono inseriti un
 nome di file indicato da \param{fname} ed un numero di linea subito dopo la
-stampa del nome del programma. Inoltre essa usa un'altra
-\index{variabili!globali} variabile globale, \var{error\_one\_per\_line}, che
-impostata ad un valore diverso da zero fa si che errori relativi alla stessa
-linea non vengano ripetuti.
+stampa del nome del programma. Inoltre essa usa un'altra variabile globale,
+\var{error\_one\_per\_line}, che impostata ad un valore diverso da zero fa si
+che errori relativi alla stessa linea non vengano ripetuti.
 
 
 % LocalWords:  filesystem like kernel saved header limits sysconf sez tab float