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 2aa5224..8d7dd0f 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{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.
@@ -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.
+\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
@@ -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}}
-\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
@@ -426,7 +430,7 @@ messaggio.
 % 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}.] 
@@ -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{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{EREMOTEIO} \textit{Remote I/O 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}.] 
@@ -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{ERESTART} \textit{Interrupted system call should be
+%   restarted}.]
 % \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{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}
 
 
index 9d0b1bf..7cb1eab 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 */
+    /* ulteriori campi accessibili in sola lettura...    */
     ...
 };
index 27f1f38..a761b4d 100644 (file)
@@ -2461,7 +2461,6 @@ usare la funzione \funcd{adjtime}, il cui prototipo è:
 }  
 \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
@@ -2563,46 +2562,46 @@ riportate in tab.~\ref{tab:sys_timex_mode}.
 \begin{table}[!htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|c|p{8cm}|}
+  \begin{tabular}[c]{|l|p{8cm}|}
     \hline
-    \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
+    \textbf{Nome} & \textbf{Significato}\\
     \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
@@ -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}.}
 
-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
@@ -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.
 
-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
-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
-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}
 
-\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
@@ -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.
 
+\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
@@ -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
-  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
@@ -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
-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.
 
 
@@ -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
-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: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.
@@ -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 è
-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