%% system.tex
%%
-%% Copyright (C) 2000-2019 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2024 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",
}
\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
\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
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
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
\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
\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
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.
\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.
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