Completata revisione del capitolo sulle funzioni di sistema, iniziato
authorSimone Piccardi <piccardi@truelite.it>
Sat, 12 Oct 2019 12:00:45 +0000 (14:00 +0200)
committerSimone Piccardi <piccardi@truelite.it>
Sat, 12 Oct 2019 12:00:45 +0000 (14:00 +0200)
segnali.

errors.tex
listati/timex.h
system.tex

index 2aa52240b30bbe0b41e2ab8ce9dcd969a2b90db5..8d7dd0fd917f7f7d9718fb4dd6d6ad2457b89f74 100644 (file)
@@ -130,10 +130,10 @@ gestione dei file.
 \item[\errcode{ESPIPE} \textit{Invalid seek operation}.] Si cercato di
   eseguire una \func{lseek} su un file che non supporta questa operazione (ad
   esempio su una \textit{pipe}, da cui il nome).
 \item[\errcode{ESPIPE} \textit{Invalid seek operation}.] Si cercato di
   eseguire una \func{lseek} su un file che non supporta questa operazione (ad
   esempio su una \textit{pipe}, da cui il nome).
-\item[\errcode{ESTALE} \textit{Stale NFS file handle}.] Indica un problema
-  interno a NFS causato da cambiamenti del filesystem del sistema remoto. Per
-  recuperare questa condizione in genere è necessario smontare e rimontare il
-  filesystem NFS.
+\item[\errcode{ESTALE} \textit{Stale file handle}.] Indica un problema interno
+  ad un filesyste remoto (in genere con NFS) causato da cambiamenti del
+  filesystem del sistema remoto. Per recuperare questa condizione in genere è
+  necessario smontare e rimontare il filesystem.
 \item[\errcode{ETXTBSY} \textit{Text file busy}.] Si è cercato di eseguire un
   file che è aperto in scrittura, o di scrivere su un file che è in
   esecuzione.
 \item[\errcode{ETXTBSY} \textit{Text file busy}.] Si è cercato di eseguire un
   file che è aperto in scrittura, o di scrivere su un file che è in
   esecuzione.
@@ -200,6 +200,10 @@ gestione dei socket e delle connessioni di rete.
   un indirizzo di destinazione predefinito per il socket. Si ottiene questo
   errore mandando dato su un socket senza connessione senza averne prima
   specificato una destinazione.
   un indirizzo di destinazione predefinito per il socket. Si ottiene questo
   errore mandando dato su un socket senza connessione senza averne prima
   specificato una destinazione.
+\item[\errcode{EHOSTDOWN} \textit{Host is down}.] L'host remoto non risponde. 
+\item[\errcode{EHOSTUNREACH} \textit{No route to host}.] L'host remoto non è
+  raggiungibile. Si ottiene quando non esiste una rotta di rete per arrivare
+  all'host remoto con il protocollo di rete utilizzato.
 \item[\errcode{EISCONN} \textit{Transport endpoint is already connected}.] Si
   è tentato di connettere un socket che è già connesso.
 \item[\errcode{EMSGSIZE} \textit{Message too long}.] Le dimensioni di un
 \item[\errcode{EISCONN} \textit{Transport endpoint is already connected}.] Si
   è tentato di connettere un socket che è già connesso.
 \item[\errcode{EMSGSIZE} \textit{Message too long}.] Le dimensioni di un
@@ -262,9 +266,9 @@ attinenti ad errori generici, si trovano qui tutti i codici di errore non
 specificati nelle sezioni precedenti.
 
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 specificati nelle sezioni precedenti.
 
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\errcode{EAGAIN} \textit{Resource temporarily unavailable}.] La funzione è
-  fallita ma potrebbe funzionare se la chiamata fosse ripetuta. Questo errore
-  accade in due tipologie di situazioni:
+\item[\errcode{EAGAIN} \textit{Resource temporarily unavailable}.] La funzione
+  è fallita ma potrebbe funzionare se la chiamata fosse ripetuta. Questo
+  errore accade in due tipologie di situazioni:
   \begin{itemize}
   \item Si è effettuata un'operazione che si sarebbe bloccata su un oggetto
     che è stato posto in modalità non bloccante. Nei vecchi sistemi questo era
   \begin{itemize}
   \item Si è effettuata un'operazione che si sarebbe bloccata su un oggetto
     che è stato posto in modalità non bloccante. Nei vecchi sistemi questo era
@@ -426,7 +430,7 @@ messaggio.
 % TODO verificare i dettagli degli errori del kernel, eventualmente cassare.
 
 % \begin{description}
 % TODO verificare i dettagli degli errori del kernel, eventualmente cassare.
 
 % \begin{description}
-% \item[\errcode{ERESTART} \textit{Interrupted system call should be restarted}.] 
+
 % \item[\errcode{ECHRNG} \textit{Channel number out of range}.] 
 % \item[\errcode{EL2NSYNC} \textit{Level 2 not synchronized}.] 
 % \item[\errcode{EL3HLT} \textit{Level 3 halted}.] 
 % \item[\errcode{ECHRNG} \textit{Channel number out of range}.] 
 % \item[\errcode{EL2NSYNC} \textit{Level 2 not synchronized}.] 
 % \item[\errcode{EL3HLT} \textit{Level 3 halted}.] 
@@ -441,13 +445,15 @@ messaggio.
 % \item[\errcode{ENOANO} \textit{No anode}.] 
 % \item[\errcode{EBADRQC} \textit{Invalid request code}.] 
 % \item[\errcode{EBADSLT} \textit{Invalid slot}.] 
 % \item[\errcode{ENOANO} \textit{No anode}.] 
 % \item[\errcode{EBADRQC} \textit{Invalid request code}.] 
 % \item[\errcode{EBADSLT} \textit{Invalid slot}.] 
-% \item[\errcode{EDEADLOCK} Identico a \errcode{EDEADLK}.] 
+% \item[\errcode{EDEADLOCK} Identico a \errcode{EDEADLK}.]
+
 % \item[\errcode{EBFONT} \textit{Bad font file format}.] 
 % \item[\errcode{ENONET} \textit{Machine is not on the network}.] 
 % \item[\errcode{ENOPKG} \textit{Package not installed}.] 
 % \item[\errcode{EBFONT} \textit{Bad font file format}.] 
 % \item[\errcode{ENONET} \textit{Machine is not on the network}.] 
 % \item[\errcode{ENOPKG} \textit{Package not installed}.] 
+% \item[\errcode{EREMOTEIO} \textit{Remote I/O error}.] 
 % \item[\errcode{EADV} \textit{Advertise error}.] 
 % \item[\errcode{ESRMNT} \textit{Srmount error}.] 
 % \item[\errcode{EADV} \textit{Advertise error}.] 
 % \item[\errcode{ESRMNT} \textit{Srmount error}.] 
-% \item[\errcode{ECOMM} \textit{Communication error on send}.] 
+% \item[\errcode{ECOMM} \textit{Communication error on send}.]
 % \item[\errcode{EDOTDOT} \textit{RFS specific error}.] 
 % \item[\errcode{ENOTUNIQ} \textit{Name not unique on network}.] 
 % \item[\errcode{EBADFD} \textit{File descriptor in bad state}.] 
 % \item[\errcode{EDOTDOT} \textit{RFS specific error}.] 
 % \item[\errcode{ENOTUNIQ} \textit{Name not unique on network}.] 
 % \item[\errcode{EBADFD} \textit{File descriptor in bad state}.] 
@@ -458,13 +464,26 @@ messaggio.
 % \item[\errcode{ELIBMAX} \textit{Attempting to link in too many shared
 %     libraries}.]
 % \item[\errcode{ELIBEXEC} \textit{Cannot exec a shared library directly}.] 
 % \item[\errcode{ELIBMAX} \textit{Attempting to link in too many shared
 %     libraries}.]
 % \item[\errcode{ELIBEXEC} \textit{Cannot exec a shared library directly}.] 
+% \item[\errcode{ERESTART} \textit{Interrupted system call should be
+%   restarted}.]
 % \item[\errcode{ESTRPIPE} \textit{Streams pipe error}.] 
 % \item[\errcode{EUCLEAN} \textit{Structure needs cleaning}.] 
 % \item[\errcode{ESTRPIPE} \textit{Streams pipe error}.] 
 % \item[\errcode{EUCLEAN} \textit{Structure needs cleaning}.] 
+% \item[\errcode{ENOTNAM} \textit{Not a XENIX named type file}.] 
 % \item[\errcode{ENAVAIL} \textit{No XENIX semaphores available}.] 
 % \item[\errcode{EISNAM} \textit{Is a named type file}.] 
 % \item[\errcode{EREMOTEIO} \textit{Remote I/O error}.] 
 % \item[\errcode{ENOMEDIUM} \textit{No medium found}.] 
 % \item[\errcode{ENAVAIL} \textit{No XENIX semaphores available}.] 
 % \item[\errcode{EISNAM} \textit{Is a named type file}.] 
 % \item[\errcode{EREMOTEIO} \textit{Remote I/O error}.] 
 % \item[\errcode{ENOMEDIUM} \textit{No medium found}.] 
-% \item[\errcode{EMEDIUMTYPE} \textit{Wrong medium type}.] 
+% \item[\errcode{EMEDIUMTYPE} \textit{Wrong medium type}.]
+% \item[\errcode{ENOKEY} \textit{Required key not available}.]
+% \item[\errcode{EKEYEXPIRED} \textit{Key has expired}.]
+% \item[\errcode{EKEYREVOKED} \textit{Key has been revoked}.]
+% \item[\errcode{EKEYREJECTED} \textit{Key was rejected by service}.]
+%/* for robust mutexes */
+% \item[\errcode{EOWNERDEAD} \textit{Owner died}.]
+% \item[\errcode{ENOTRECOVERABLE} \textit{State not recoverable}.]
+% \item[\errcode{ERFKILL} \textit{Operation not possible due to RF-kill}.]
+% \item[\errcode{EHWPOISON} \textit{Memory page has hardware error}.]
+
 % \end{description}
 
 
 % \end{description}
 
 
index 9d0b1bf48aae0bca7626c3034ae0cdf1bf0c0e80..7cb1eab992ae3e6941b3fa4241e91540447c63d4 100644 (file)
@@ -10,5 +10,6 @@ struct timex {
     long tolerance;       /* clock frequency tolerance (ppm) (read only) */
     struct timeval time;  /* (read only) */
     long tick;            /* (modified) usecs between clock ticks */
     long tolerance;       /* clock frequency tolerance (ppm) (read only) */
     struct timeval time;  /* (read only) */
     long tick;            /* (modified) usecs between clock ticks */
+    /* ulteriori campi accessibili in sola lettura...    */
     ...
 };
     ...
 };
index 27f1f386ee767487c7580c436962dae495f2ac74..a761b4dcd31e2431c3ea9f19294975863f1ee21f 100644 (file)
@@ -2461,7 +2461,6 @@ usare la funzione \funcd{adjtime}, il cui prototipo è:
 }  
 \end{funcproto}
 
 }  
 \end{funcproto}
 
-
 Questa funzione permette di avere un aggiustamento graduale del tempo di
 sistema in modo che esso sia sempre crescente in maniera monotona. Il valore
 indicato nella struttura \struct{timeval} puntata da \param{delta} esprime il
 Questa funzione permette di avere un aggiustamento graduale del tempo di
 sistema in modo che esso sia sempre crescente in maniera monotona. Il valore
 indicato nella struttura \struct{timeval} puntata da \param{delta} esprime il
@@ -2563,46 +2562,46 @@ riportate in tab.~\ref{tab:sys_timex_mode}.
 \begin{table}[!htb]
   \footnotesize
   \centering
 \begin{table}[!htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|c|p{8cm}|}
+  \begin{tabular}[c]{|l|p{8cm}|}
     \hline
     \hline
-    \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
+    \textbf{Nome} & \textbf{Significato}\\
     \hline
     \hline
     \hline
     \hline
-    \constd{ADJ\_OFFSET}        & 0x0001 & Imposta la differenza fra il tempo
-                                           reale e l'orologio di sistema: 
-                                           deve essere indicata in microsecondi
-                                           nel campo \var{offset} di
-                                           \struct{timex}.\\ 
-    \constd{ADJ\_FREQUENCY}     & 0x0002 & Imposta la differenza in frequenza
-                                           fra il tempo reale e l'orologio di
-                                           sistema: deve essere indicata
-                                           in parti per milione nel campo
-                                           \var{frequency} di \struct{timex}.\\
-    \constd{ADJ\_MAXERROR}      & 0x0004 & Imposta il valore massimo 
-                                           dell'errore sul tempo, espresso in
-                                           microsecondi nel campo
-                                           \var{maxerror} di \struct{timex}.\\ 
-    \constd{ADJ\_ESTERROR}      & 0x0008 & Imposta la stima dell'errore
-                                           sul tempo, espresso in microsecondi 
-                                           nel campo \var{esterror} di
-                                           \struct{timex}.\\
-    \constd{ADJ\_STATUS}        & 0x0010 & Imposta alcuni valori di stato
-                                           interni usati dal 
-                                           sistema nella gestione
-                                           dell'orologio specificati nel campo
-                                           \var{status} di \struct{timex}.\\ 
-    \constd{ADJ\_TIMECONST}     & 0x0020 & Imposta la larghezza di banda del 
-                                           PLL implementato dal kernel,
-                                           specificato nel campo
-                                           \var{constant} di \struct{timex}.\\ 
-    \constd{ADJ\_TICK}          & 0x4000 & Imposta il valore dei \textit{tick}
-                                           del timer in
-                                           microsecondi, espresso nel campo
-                                           \var{tick} di \struct{timex}.\\  
-    \constd{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Chiede uno spostamento una tantum 
-                                           dell'orologio secondo il valore del
-                                           campo \var{offset} simulando il
-                                           comportamento di \func{adjtime}.\\ 
+    \constd{ADJ\_OFFSET}        & Imposta la differenza fra il tempo
+                                  reale e l'orologio di sistema: 
+                                  deve essere indicata in microsecondi
+                                  nel campo \var{offset} di
+                                  \struct{timex}.\\ 
+    \constd{ADJ\_FREQUENCY}     & Imposta la differenza in frequenza
+                                  fra il tempo reale e l'orologio di
+                                  sistema: deve essere indicata
+                                  in parti per milione nel campo
+                                  \var{frequency} di \struct{timex}.\\
+    \constd{ADJ\_MAXERROR}      & Imposta il valore massimo 
+                                  dell'errore sul tempo, espresso in
+                                  microsecondi nel campo
+                                  \var{maxerror} di \struct{timex}.\\ 
+    \constd{ADJ\_ESTERROR}      & Imposta la stima dell'errore
+                                  sul tempo, espresso in microsecondi 
+                                  nel campo \var{esterror} di
+                                  \struct{timex}.\\
+    \constd{ADJ\_STATUS}        & Imposta alcuni valori di stato
+                                  interni usati dal 
+                                  sistema nella gestione
+                                  dell'orologio specificati nel campo
+                                  \var{status} di \struct{timex}.\\ 
+    \constd{ADJ\_TIMECONST}     & Imposta la larghezza di banda del 
+                                  PLL implementato dal kernel,
+                                  specificato nel campo
+                                  \var{constant} di \struct{timex}.\\ 
+    \constd{ADJ\_TICK}          & Imposta il valore dei \textit{tick}
+                                  del timer in
+                                  microsecondi, espresso nel campo
+                                  \var{tick} di \struct{timex}.\\  
+    \constd{ADJ\_OFFSET\_SINGLESHOT}&Chiede uno spostamento una tantum 
+                                      dell'orologio secondo il valore del
+                                      campo \var{offset} simulando il
+                                      comportamento di \func{adjtime}.\\ 
     \hline
   \end{tabular}
   \caption{Costanti per l'assegnazione del valore del campo \var{mode} della
     \hline
   \end{tabular}
   \caption{Costanti per l'assegnazione del valore del campo \var{mode} della
@@ -2675,7 +2674,7 @@ dell'orologio per effettuare gli aggiustamenti del calendario per tenere conto
 del disallineamento con il tempo solare.\footnote{per dettagli si consulti
   \url{http://it.wikipedia.org/wiki/Leap_second}.}
 
 del disallineamento con il tempo solare.\footnote{per dettagli si consulti
   \url{http://it.wikipedia.org/wiki/Leap_second}.}
 
-I campi \var{tm\_min} e\var{tm\_hour} che indicano rispettivamente minuti ed
+I campi \var{tm\_min} e \var{tm\_hour} che indicano rispettivamente minuti ed
 ore hanno valori compresi rispettivamente fra 0 e 59 e fra 0 e 23. Il campo
 \var{tm\_mday} che indica il giorno del mese prevede invece un valore compreso
 fra 1 e 31, ma la \acr{glibc} supporta pure il valore 0 come indicazione
 ore hanno valori compresi rispettivamente fra 0 e 59 e fra 0 e 23. Il campo
 \var{tm\_mday} che indica il giorno del mese prevede invece un valore compreso
 fra 1 e 31, ma la \acr{glibc} supporta pure il valore 0 come indicazione
@@ -2769,40 +2768,30 @@ 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.
 
 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
-tipo \type{time\_t} con il \textit{calendar time}. La funzione ignora i campi
-\var{tm\_wday} e \var{tm\_yday} e per gli altri campi normalizza eventuali
-valori fuori degli intervalli specificati in precedenza: se cioè si indica un
-12 per \var{tm\_mon} si prenderà il gennaio dell'anno successivo. Inoltre la
-funzione tiene conto del valore di \var{tm\_isdst} per effettuare le
-correzioni relative al fuso orario: un valore positivo indica che deve essere
-tenuta in conto l'ora legale, un valore nullo che non deve essere applicata
-nessuna correzione, un valore negativo che si deve far ricorso alle
+La funzione \func{mktime} esegue invece la conversione di un
+\textit{broken-down time} a partire da una struttura \struct{tm} restituendo
+direttamente un valore di tipo \type{time\_t} con il \textit{calendar
+  time}. La funzione ignora i campi \var{tm\_wday} e \var{tm\_yday} e per gli
+altri campi normalizza eventuali valori fuori degli intervalli specificati in
+precedenza: se cioè si indica un 12 per \var{tm\_mon} si prenderà il gennaio
+dell'anno successivo.
+
+Inoltre la funzione tiene conto del valore di \var{tm\_isdst} per effettuare
+le correzioni relative al fuso orario: un valore positivo indica che deve
+essere tenuta in conto l'ora legale, un valore nullo che non deve essere
+applicata nessuna correzione, un valore negativo che si deve far ricorso alle
 informazioni relative al proprio fuso orario per determinare lo stato dell'ora
 informazioni relative al proprio fuso orario per determinare lo stato dell'ora
-legale.  
+legale.
 
 
-La funzione inoltre modifica i valori della struttura \struct{tm} in forma di
+La funzione infine modifica i valori della struttura \struct{tm} in forma di
 \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
 \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}.
+stato dell'ora legale. La funzione provvede anche ad impostare il valore della
+variabile globale \var{tzname}.
 
 \itindend{calendar~time}
 
 
 \itindend{calendar~time}
 
-\begin{figure}[!htb]
-  \footnotesize
-  \centering
-  \begin{minipage}[c]{.75\textwidth}
-    \includestruct{listati/time_zone_var.c}
-  \end{minipage} 
-  \normalsize 
-  \caption{Le variabili globali usate per la gestione delle
-    \textit{timezone}.}
-  \label{fig:sys_tzname}
-\end{figure}
-
 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
 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
@@ -2832,6 +2821,18 @@ per l'ora legale. Anche se in fig.~\ref{fig:sys_tzname} sono indicate come
 \var{timezone} indica la differenza di fuso orario in secondi, mentre
 \var{daylight} indica se è attiva o meno l'ora legale.
 
 \var{timezone} indica la differenza di fuso orario in secondi, mentre
 \var{daylight} indica se è attiva o meno l'ora legale.
 
+\begin{figure}[!htb]
+  \footnotesize
+  \centering
+  \begin{minipage}[c]{.75\textwidth}
+    \includestruct{listati/time_zone_var.c}
+  \end{minipage} 
+  \normalsize 
+  \caption{Le variabili globali usate per la gestione delle
+    \textit{timezone}.}
+  \label{fig:sys_tzname}
+\end{figure}
+
 Benché la funzione \func{asctime} fornisca la modalità più immediata per
 stampare un tempo o una data, la flessibilità non fa parte delle sue
 caratteristiche; quando si vuole poter stampare solo una parte (l'ora, o il
 Benché la funzione \func{asctime} fornisca la modalità più immediata per
 stampare un tempo o una data, la flessibilità non fa parte delle sue
 caratteristiche; quando si vuole poter stampare solo una parte (l'ora, o il
@@ -2902,8 +2903,8 @@ Il risultato della funzione è controllato dalla stringa di formato
 \param{format}, tutti i caratteri restano invariati eccetto \texttt{\%} che
 viene utilizzato come modificatore. Alcuni dei possibili valori che esso può
 assumere sono riportati in tab.~\ref{tab:sys_strftime_format}.\footnote{per la
 \param{format}, tutti i caratteri restano invariati eccetto \texttt{\%} che
 viene utilizzato come modificatore. Alcuni dei possibili valori che esso può
 assumere sono riportati in tab.~\ref{tab:sys_strftime_format}.\footnote{per la
-  precisione si sono riportati definiti dallo standard ANSI C, che sono anche
-  quelli ripresi in POSIX.1; la \acr{glibc} fornisce anche le estensioni
+  precisione si sono riportati quelli definiti dallo standard ANSI C che sono
+  anche quelli ripresi in POSIX.1; la \acr{glibc} fornisce anche le estensioni
   introdotte da POSIX.2 per il comando \cmd{date}, i valori introdotti da
   SVID3 e ulteriori estensioni GNU; l'elenco completo dei possibili valori è
   riportato nella pagina di manuale della funzione.} La funzione tiene conto
   introdotte da POSIX.2 per il comando \cmd{date}, i valori introdotti da
   SVID3 e ulteriori estensioni GNU; l'elenco completo dei possibili valori è
   riportato nella pagina di manuale della funzione.} La funzione tiene conto
@@ -2939,7 +2940,7 @@ questo riguardo si rimanda alla lettura della pagina di manuale.
 
 Si tenga presente comunque che anche in caso di scansione completamente
 riuscita la funzione sovrascrive soltanto i campi di \param{tm} indicati dal
 
 Si tenga presente comunque che anche in caso di scansione completamente
 riuscita la funzione sovrascrive soltanto i campi di \param{tm} indicati dal
-formato, la struttura originaria infatti non viene inizializzati e gli altri
+formato, la struttura originaria infatti non viene inizializzata e gli altri
 campi restano ai valori che avevano in precedenza.
 
 
 campi restano ai valori che avevano in precedenza.
 
 
@@ -2981,9 +2982,9 @@ questo è infatti il metodo usato da Linux per renderla locale ai singoli
 \textit{thread}.
 
 La variabile è in genere definita come \dirct{volatile} dato che può essere
 \textit{thread}.
 
 La variabile è in genere definita come \dirct{volatile} dato che può essere
-cambiata in modo asincrono da un segnale, per un esempio si veda
+cambiata in modo asincrono da un segnale; per un esempio si veda
 sez.~\ref{sec:sig_sigchld} ricordando quanto trattato in
 sez.~\ref{sec:sig_sigchld} ricordando quanto trattato in
-sez.~\ref{sec:proc_race_cond}). Dato che un gestore di segnale scritto bene si
+sez.~\ref{sec:proc_race_cond}. Dato che un gestore di segnale scritto bene si
 cura di salvare e ripristinare il valore della variabile all'uscita, nella
 programmazione normale, quando si può fare l'assunzione che i gestori di
 segnali siano ben scritti, di questo non è necessario preoccuparsi.
 cura di salvare e ripristinare il valore della variabile all'uscita, nella
 programmazione normale, quando si può fare l'assunzione che i gestori di
 segnali siano ben scritti, di questo non è necessario preoccuparsi.
@@ -3111,7 +3112,9 @@ variabili globali:
 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
 per un codice di errore, l'utilizzo di una di queste stringhe è
 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
 per un codice di errore, l'utilizzo di una di queste stringhe è
-sostanzialmente equivalente a quello di \func{strerror}.
+sostanzialmente equivalente a quello di \func{strerror}, ma dato che non è
+detto che \var{sys\_errlist} sia stato aggiornato in caso di aggiunta di nuovi
+errori, il suo uso è deprecato e si deve sempre usare \func{perror}.
 
 \begin{figure}[!htbp]
   \footnotesize \centering
 
 \begin{figure}[!htbp]
   \footnotesize \centering