Domande da passare a Kerrisk
[gapil.git] / system.tex
index bc4d8fbda52ec6cd234896c77d0bfa75738cdad2..4ef44d3351f8efa5caac717cd0a6ca74c3e215b4 100644 (file)
@@ -1,6 +1,6 @@
 %% system.tex
 %%
-%% Copyright (C) 2000-2012 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2015 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",
@@ -716,9 +716,9 @@ informazioni degli utenti e dei gruppi per insiemi di macchine e servizi
 all'interno di una stessa organizzazione, in modo da mantenere coerenti i
 dati, ha portato anche alla necessità di poter recuperare e memorizzare dette
 informazioni su supporti diversi dai file citati, introducendo il sistema del
-\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che
-tratteremo brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la
-sua applicazione è cruciale nella procedura di risoluzione di nomi di rete.
+\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} (che
+tratteremo brevemente in sez.~\ref{sec:sock_resolver}) dato che la sua
+applicazione è cruciale nella procedura di risoluzione di nomi di rete.
 
 In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
@@ -879,16 +879,16 @@ fig.~\ref{fig:sys_group_struct}.
 
 Le funzioni viste finora sono in grado di leggere le informazioni sia
 direttamente dal file delle password in \conffile{/etc/passwd} che tramite il
-sistema del \itindex{Name~Service~Switch~(NSS)} \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 alle funzioni della libreria PAM, ma questo non è un
-  argomento che tratteremo qui.} 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 interfaccia 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}.
+sistema del \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 alle funzioni
+  della libreria PAM, ma questo non è un argomento che tratteremo qui.} 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 interfaccia 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
@@ -1403,11 +1403,23 @@ più in grado di essere eseguito in maniera coerente.  Il secondo valore,
 programmi e dei dispositivi, e viene in genere usato per realizzare la
 cosiddetta ibernazione in RAM.
 
+% TODO: introdotta con il kernel 3.17 è stata introdotta
+% kexec_file_load, per caricare immagine firmate per il secure boot,
+% vedi anche http://lwn.net/Articles/603116/
+
 % TODO documentare keyctl ????
 % (fare sezione dedicata ????)
+
+% TODO documentare la Crypto API del kernel
+
+% TODO documentare la syscall getrandom, introdotta con il kernel 3.17, vedi
+% http://lwn.net/Articles/606141/ 
+
 %\subsection{La gestione delle chiavi crittografiche}
 %\label{sec:keyctl_management}
 
+%TODO non è chiaro se farlo qui, ma documentare la syscall bpf aggiunta con il
+%kernel 3.18, vedi http://lwn.net/Articles/612878/
 
 \section{Il controllo dell'uso delle risorse}
 \label{sec:sys_res_limits}
@@ -1525,11 +1537,11 @@ indicano rispettivamente il tempo impiegato dal processo nell'eseguire le
 istruzioni in \textit{user space}, e quello impiegato dal kernel nelle
 \textit{system call} eseguite per conto del processo (vedi
 sez.~\ref{sec:sys_unix_time}). I campi \var{ru\_minflt} e \var{ru\_majflt}
-servono a quantificare l'uso della memoria virtuale\index{memoria~virtuale} e
-corrispondono rispettivamente al numero di \itindex{page~fault} \textit{page
-  fault} (vedi sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su
-disco (i cosiddetti \textit{minor page fault}), a quelli che invece han
-richiesto I/O su disco (detti invece \textit{major page
+servono a quantificare l'uso della memoria virtuale e corrispondono
+rispettivamente al numero di \textit{page fault} (vedi
+sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su disco (i
+cosiddetti \textit{minor page fault}), a quelli che invece han richiesto I/O
+su disco (detti invece \textit{major page
   fault}).% mentre \var{ru\_nswap} ed al numero di volte che
 % il processo è stato completamente tolto dalla memoria per essere inserito
 % nello swap.
@@ -1582,8 +1594,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}
@@ -1638,7 +1649,7 @@ di quest'ultimo.  Nello specificare un limite, oltre a fornire dei valori
 specifici, si può anche usare la costante \const{RLIM\_INFINITY} che permette
 di sbloccare completamente l'uso di una risorsa. Si ricordi però che solo un
 processo con i privilegi di amministratore\footnote{per essere precisi in
-  questo caso quello che serve è la \itindex{capabilities} \textit{capability}
+  questo caso quello che serve è la \textit{capability}
   \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può
 innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti.
@@ -1663,11 +1674,10 @@ riportati nel seguente elenco:
   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
@@ -1783,11 +1793,6 @@ messaggi vuoti che comunque richiede delle risorse di gestione. Questa risorsa
   kernel 2.6.25 per impedire che un processo \textit{real-time} possa bloccare
   il sistema.
 
-% TODO trattare i seguenti...
-% aggiungere i limiti che mancano come RLIMIT_RTTIME introdotto con il 2.6.25
-% vedi file include/asm-generic/resource.h
-
-
 \item[\const{RLIMIT\_SIGPENDING}] Questa risorsa indica il numero massimo di
   segnali che possono essere mantenuti in coda per ciascun utente,
   identificato per \ids{UID} reale. Il limite comprende sia i segnali normali
@@ -1851,8 +1856,8 @@ che sia stata definita la macro \macro{\_GNU\_SOURCE}. Il primo argomento
 indica il \ids{PID} del processo di cui si vogliono cambiare i limiti e si può
 usare un valore nullo per indicare il processo chiamante.  Per modificare i
 limiti di un altro processo, a meno di non avere privilegi
-amministrativi,\footnote{anche in questo caso la \itindex{capabilities}
-  \textit{capability} necessaria è \const{CAP\_SYS\_RESOURCE} (vedi
+amministrativi,\footnote{anche in questo caso la \textit{capability}
+  necessaria è \const{CAP\_SYS\_RESOURCE} (vedi
   sez.~\ref{sec:proc_capabilities}).}  l'\ids{UID} ed il \ids{GID} reale del
 chiamante devono coincidere con \ids{UID} e \ids{GID} del processo indicato
 per i tre gruppi reale, effettivo e salvato.
@@ -1871,14 +1876,13 @@ a \func{getrlimit} e \func{setrlimit}, così come i restanti requisiti.
 
 La gestione della memoria è già stata affrontata in dettaglio in
 sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il
-meccanismo della \index{memoria~virtuale} memoria virtuale attraverso la
-divisione della memoria fisica in pagine.  In genere tutto ciò è del tutto
-trasparente al singolo processo, ma in certi casi, come per l'I/O mappato in
-memoria (vedi sez.~\ref{sec:file_memory_map}) che usa lo stesso meccanismo per
-accedere ai file, è necessario conoscere le dimensioni delle pagine usate dal
-kernel. Lo stesso vale quando si vuole gestire in maniera ottimale
-l'interazione della memoria che si sta allocando con il meccanismo della
-\index{paginazione} paginazione.
+meccanismo della memoria virtuale attraverso la divisione della memoria fisica
+in pagine.  In genere tutto ciò è del tutto trasparente al singolo processo,
+ma in certi casi, come per l'I/O mappato in memoria (vedi
+sez.~\ref{sec:file_memory_map}) che usa lo stesso meccanismo per accedere ai
+file, è necessario conoscere le dimensioni delle pagine usate dal kernel. Lo
+stesso vale quando si vuole gestire in maniera ottimale l'interazione della
+memoria che si sta allocando con il meccanismo della paginazione.
 
 Un tempo la dimensione delle pagine di memoria era fissata una volta per tutte
 dall'architettura hardware, per cui il relativo valore veniva mantenuto in una
@@ -1965,11 +1969,11 @@ Il suo prototipo è:
 \end{funcproto}
 
 La funzione restituisce in ciascun elemento di \param{loadavg} il numero medio
-di processi attivi sulla coda dello \itindex{scheduler} scheduler, calcolato
-su diversi intervalli di tempo.  Il numero di intervalli che si vogliono
-leggere è specificato da \param{nelem}, dato che nel caso di Linux il carico
-viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti),
-questo è anche il massimo valore che può essere assegnato a questo argomento.
+di processi attivi sulla coda dello \textit{scheduler}, calcolato su diversi
+intervalli di tempo.  Il numero di intervalli che si vogliono leggere è
+specificato da \param{nelem}, dato che nel caso di Linux il carico viene
+valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti), questo è
+anche il massimo valore che può essere assegnato a questo argomento.
 
 
 \subsection{La \textsl{contabilità} in stile BSD}
@@ -1999,9 +2003,9 @@ prototipo è:
   \begin{errlist}
     \item[\errcode{EACCES}] non si hanno i permessi per accedere a
       \param{pathname}.
+    \item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}.
     \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{EUSERS}] non sono disponibili nel kernel strutture per il
       file o si è finita la memoria.
     \end{errlist}
@@ -2013,7 +2017,7 @@ prototipo è:
 La funzione attiva il salvataggio dei dati sul file indicato dal
 \textit{pathname} contenuti nella stringa puntata da \param{filename}; la
 funzione richiede che il processo abbia i privilegi di amministratore (è
-necessaria la \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
+necessaria la \textit{capability} \const{CAP\_SYS\_PACCT}, vedi
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
 \param{filename} il \textit{BSD accounting} viene invece disabilitato. Un
 semplice esempio per l'uso di questa funzione è riportato nel programma
@@ -2021,10 +2025,9 @@ semplice esempio per l'uso di questa funzione è riportato nel programma
 
 Quando si attiva la contabilità, il file che si indica deve esistere; esso
 verrà aperto in sola scrittura e le informazioni verranno registrate in
-\itindex{append~mode} \textit{append} in coda al file tutte le volte che un
-processo termina. Le informazioni vengono salvate in formato binario, e
-corrispondono al contenuto della apposita struttura dati definita all'interno
-del kernel.
+\textit{append} in coda al file tutte le volte che un processo termina. Le
+informazioni 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 \sysctlfile{kernel/acct} (o
@@ -2053,19 +2056,21 @@ gestione di data e ora.
 \subsection{La misura del tempo in Unix}
 \label{sec:sys_unix_time}
 
+\itindbeg{calendar~time}
+
 Tradizionalmente nei sistemi unix-like sono sempre stati previsti due tipi
 distinti di tempi, caratterizzati da altrettante modalità di misura ed
 espressi con diversi tipi di dati, chiamati rispettivamente \textit{calendar
   time} e \textit{process time}, secondo le seguenti definizioni:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
-\item[\textit{calendar time}] \itindex{calendar~time} detto anche
-  \textsl{tempo di calendario}, \textsl{tempo d'orologio} o \textit{tempo
-    reale}. Si tratta di un tempo assoluto o di un intervallo di tempo come lo
-  intende normalmente per le misure fatte con un orologio. Per esprimere
+\item[\textit{calendar time}] detto anche \textsl{tempo di calendario}, 
+  \textsl{tempo d'orologio} o \textit{tempo reale}. Si tratta di un
+  tempo assoluto o di un intervallo di tempo come lo intende
+  normalmente per le misure fatte con un orologio. Per esprimere
   questo tempo è stato riservato il tipo \type{time\_t}, e viene
-  tradizionalmente misurato in secondi a partire dalla mezzanotte del primo
-  gennaio 1970, data che viene chiamata \textit{the Epoch}.
+  tradizionalmente misurato in secondi a partire dalla mezzanotte del
+  primo gennaio 1970, data che viene chiamata \textit{the Epoch}.
 
 \item[\textit{process time}] \itindex{process~time} detto anche \textsl{tempo
     di processore} o \textsl{tempo di CPU}. Si tratta del tempo impiegato da
@@ -2077,14 +2082,15 @@ espressi con diversi tipi di dati, chiamati rispettivamente \textit{calendar
   precedente indica soltanto un intervallo di durata.
 \end{basedescript}
 
-Il \itindex{calendar~time} \textit{calendar time} viene sempre mantenuto
-facendo riferimento al cosiddetto \textit{tempo universale coordinato} UTC,
-anche se talvolta viene usato il cosiddetto GMT (\textit{Greenwich Mean Time})
-dato che l'UTC corrisponde all'ora locale di Greenwich. Si tratta del tempo su
-cui viene mantenuto il cosiddetto \textsl{orologio di sistema}, e viene usato
-per indicare i tempi dei file (quelli di sez.~\ref{sec:file_file_times}) o le
-date di avvio dei processi, ed è il tempo che viene usato dai demoni che
-compiono lavori amministrativi ad orari definito, come \cmd{cron}.
+Il \textit{calendar time} viene sempre mantenuto facendo riferimento
+al cosiddetto \textit{tempo universale coordinato} UTC, anche se
+talvolta viene usato il cosiddetto GMT (\textit{Greenwich Mean Time})
+dato che l'UTC corrisponde all'ora locale di Greenwich. Si tratta del
+tempo su cui viene mantenuto il cosiddetto \textsl{orologio di
+  sistema}, e viene usato per indicare i tempi dei file (quelli di
+sez.~\ref{sec:file_file_times}) o le date di avvio dei processi, ed è
+il tempo che viene usato dai demoni che compiono lavori amministrativi
+ad orari definito, come \cmd{cron}.
 
 Si tenga presente che questo tempo è mantenuto dal kernel e non è detto che
 corrisponda al tempo misurato dall'orologio hardware presente su praticamente
@@ -2106,6 +2112,8 @@ opportune informazioni di localizzazione (specificate in
 di sistema misuri sempre un tempo monotono crescente come nella realtà, anche
 in presenza di cambi di fusi orari.
 
+\itindend{calendar~time}
+
 Il \itindex{process~time} \textit{process time} invece indica sempre una
 misura di un lasso di tempo e viene usato per tenere conto dei tempi di
 esecuzione dei processi. Esso viene sempre diviso in \textit{user time} e
@@ -2114,7 +2122,7 @@ infatti calcola tre tempi:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\textit{clock time}] il tempo \textsl{reale}, viene chiamato anche
   \textit{wall clock time} o \textit{elapsed time}, passato dall'avvio del
-  processo. Questo tempo fa riferimento al \itindex{calendar~time}
+  processo. Questo tempo fa riferimento al 
   \textit{calendar time} e dice la durata effettiva dell'esecuzione del
   processo, ma chiaramente dipende dal carico del sistema e da quanti altri
   processi stanno girando nello stesso momento.
@@ -2176,7 +2184,7 @@ 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
   call} (ad esempio per i timeout). Con il 2.6.21 e l'introduzione degli
-\index{High~Resolution~Timer~(HRT)} \textit{high-resolution timers} (HRT) è
+\itindex{High~Resolution~Timer~(HRT)} \textit{high-resolution timers} (HRT) è
 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}.
@@ -2189,12 +2197,12 @@ sez.~\ref{sec:sig_timer_adv}.
 \itindbeg{process~time}
 
 Di norma tutte le operazioni del sistema fanno sempre riferimento al
-\itindex{calendar~time} \textit{calendar time}, l'uso del \textit{process
-  time} è riservato a quei casi in cui serve conoscere i tempi di esecuzione
-di un processo (ad esempio per valutarne l'efficienza). In tal caso infatti
-fare ricorso al \textit{calendar time} è inutile in quanto il tempo può essere
-trascorso mentre un altro processo era in esecuzione o in attesa del risultato
-di una operazione di I/O.
+\textit{calendar time}, l'uso del \textit{process time} è riservato a
+quei casi in cui serve conoscere i tempi di esecuzione di un processo
+(ad esempio per valutarne l'efficienza). In tal caso infatti fare
+ricorso al \textit{calendar time} è inutile in quanto il tempo può
+essere trascorso mentre un altro processo era in esecuzione o in
+attesa del risultato di una operazione di I/O.
 
 La funzione più semplice per leggere il \textit{process time} di un processo è
 \funcd{clock}, che da una valutazione approssimativa del tempo di CPU
@@ -2371,9 +2379,9 @@ sia necessario; il suo prototipo è:
 
 Dato che modificare l'ora ha un impatto su tutto il sistema il cambiamento
 dell'orologio è una operazione privilegiata e questa funzione può essere usata
-solo da un processo con i privilegi di amministratore (per la precisione la la
-\itindex{capabilities} capability \const{CAP\_SYS\_TIME}), altrimenti la
-chiamata fallirà con un errore di \errcode{EPERM}.
+solo da un processo con i privilegi di amministratore (per la precisione la
+\textit{capability} \const{CAP\_SYS\_TIME}), altrimenti la chiamata fallirà
+con un errore di \errcode{EPERM}.
 
 Data la scarsa precisione nell'uso di \type{time\_t}, che ha una risoluzione
 massima di un secondo, quando si devono effettuare operazioni sui tempi di
@@ -2409,10 +2417,9 @@ non dipende dall'uso di queste strutture.
 
 Come nel caso di \func{stime} anche \func{settimeofday} può essere utilizzata
 solo da un processo coi privilegi di amministratore e più precisamente con la
-\itindex{capability} capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di
-una condizione generale che continua a valere per qualunque funzione che vada
-a modificare l'orologio di sistema, comprese tutte quelle che tratteremo in
-seguito.
+capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di una condizione generale
+che continua a valere per qualunque funzione che vada a modificare l'orologio
+di sistema, comprese tutte quelle che tratteremo in seguito.
 
 Il secondo argomento di entrambe le funzioni è una struttura
 \struct{timezone}, che storicamente veniva utilizzata per specificare appunto
@@ -2443,9 +2450,9 @@ usare la funzione \funcd{adjtime}, il cui prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-  \item[\errcode{EPERM}] il processo non i privilegi di amministratore.
   \item[\errcode{EINVAL}] il valore di \param{delta} eccede il massimo
     consentito.
+  \item[\errcode{EPERM}] il processo non i privilegi di amministratore.
   \end{errlist}
 }  
 \end{funcproto}
@@ -2491,10 +2498,10 @@ regolare anche la velocità e le derive dell'orologio di sistema.  La funzione
   successo e $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei
   valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] si è richiesta una modifica dei parametri ed il
-    processo non ha i privilegi di amministratore.
   \item[\errcode{EINVAL}] si sono indicati valori fuori dall'intervallo
     consentito per qualcuno dei campi di \param{buf}.
+  \item[\errcode{EPERM}] si è richiesta una modifica dei parametri ed il
+    processo non ha i privilegi di amministratore.
   \end{errlist}
   ed inoltre \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
@@ -2614,9 +2621,9 @@ sintassi specificata per la forma equivalente di questa funzione definita come
 \code{ADJ}.
 
 Si tenga presente infine che con l'introduzione a partire dal kernel 2.6.21
-degli \itindex{high~resolution~timer} \textit{high resolution timer} ed il
-supporto per i cosiddetti POSIX \textit{real-time clock}, si può ottenere il
-\textit{calendar time} direttamente da questi, come vedremo in
+degli \itindex{High~Resolution~Timer~(HRT)} \textit{high-resolution timer} ed
+il supporto per i cosiddetti POSIX \textit{real-time clock}, si può ottenere
+il \textit{calendar time} direttamente da questi, come vedremo in
 sez.~\ref{sec:sig_timer_adv}, con la massima risoluzione possibile per
 l'hardware della macchina.
 
@@ -3125,10 +3132,10 @@ completo del programma è allegato nel file \file{ErrCode.c} e contiene pure la
 gestione delle opzioni e tutte le definizioni necessarie ad associare il
 valore numerico alla costante simbolica. In particolare si è riportata la
 sezione che converte la stringa passata come argomento in un intero
-(\texttt{\small 1--2}), controllando con i valori di ritorno di \funcm{strtol}
-che la conversione sia avvenuta correttamente (\texttt{\small 4--10}), e poi
+(\texttt{\small 1-2}), controllando con i valori di ritorno di \funcm{strtol}
+che la conversione sia avvenuta correttamente (\texttt{\small 4-10}), e poi
 stampa, a seconda dell'opzione scelta il messaggio di errore (\texttt{\small
-  11--14}) o la macro (\texttt{\small 15--17}) associate a quel codice.
+  11-14}) o la macro (\texttt{\small 15-17}) associate a quel codice.