X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=01930a0c182364ce5e07db72c671b1ace60f7668;hp=fd0284d05b0bb478454b75868ad852c70142c0d9;hb=2c682ba44f85eb183ddf75760b38bf048f89de53;hpb=c3e498249706436db56faaa3be03458b7ac1113d diff --git a/system.tex b/system.tex index fd0284d..01930a0 100644 --- a/system.tex +++ b/system.tex @@ -882,18 +882,18 @@ nome del filesystem stesso. \footnotesize \centering \begin{minipage}[c]{15cm} \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{} - struct statfs { - long f_type; /* tipo di filesystem */ - long f_bsize; /* dimensione ottimale dei blocchi di I/O */ - long f_blocks; /* blocchi totali nel filesystem */ - long f_bfree; /* blocchi liberi nel filesystem */ - long f_bavail; /* blocchi liberi agli utenti normali */ - long f_files; /* inodes totali nel filesystem */ - long f_ffree; /* inodes liberi nel filesystem */ - fsid_t f_fsid; /* filesystem id */ - long f_namelen; /* lunghezza massima dei nomi dei file */ - long f_spare[6]; /* riservati per uso futuro */ - }; +struct statfs { + long f_type; /* tipo di filesystem */ + long f_bsize; /* dimensione ottimale dei blocchi di I/O */ + long f_blocks; /* blocchi totali nel filesystem */ + long f_bfree; /* blocchi liberi nel filesystem */ + long f_bavail; /* blocchi liberi agli utenti normali */ + long f_files; /* inodes totali nel filesystem */ + long f_ffree; /* inodes liberi nel filesystem */ + fsid_t f_fsid; /* filesystem id */ + long f_namelen; /* lunghezza massima dei nomi dei file */ + long f_spare[6]; /* riservati per uso futuro */ +}; \end{lstlisting} \end{minipage} \normalsize @@ -1455,10 +1455,10 @@ corrente e massimo. \centering \begin{minipage}[c]{15cm} \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{} - struct rlimit { - rlim_t rlim_cur; - rlim_t rlim_max; - }; +struct rlimit { + rlim_t rlim_cur; + rlim_t rlim_max; +}; \end{lstlisting} \end{minipage} \normalsize @@ -1782,12 +1782,12 @@ struttura di tipo \var{tms}, la cui definizione \centering \begin{minipage}[c]{15cm} \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{} - struct tms { - clock_t tms_utime; /* user time */ - clock_t tms_stime; /* system time */ - clock_t tms_cutime; /* user time of children */ - clock_t tms_cstime; /* system time of children */ - }; +struct tms { + clock_t tms_utime; /* user time */ + clock_t tms_stime; /* system time */ + clock_t tms_cutime; /* user time of children */ + clock_t tms_cstime; /* system time of children */ +}; \end{lstlisting} \end{minipage} \normalsize @@ -1812,11 +1812,43 @@ questi ``nipoti'' non potranno essere considerati nel calcolo di questi tempi. \subsection{Le funzioni per il \textit{calendar time}} \label{sec:sys_time_base} -Normalmente il \textit{calendar time} è mantenuto in una variabile di tipo -\type{time\_t}, che usualmente corrisponde ad un tipo nativo (in Linux è un -intero a 32 bit). Le \acr{glibc} provvedono delle rappresentazioni -alternative che consentono un suo utilizzo per diversi scopi; in particolare -quando necessita manipolare +Come anticipato in \secref{sec:sys_unix_time} il \textit{calendar time} è +mantenuto dal kernel in una variabile di tipo \type{time\_t}, che usualmente +corrisponde ad un tipo nativo (in Linux è un intero a 32 bit). Il valore +corrente del \textit{calendar time} può essere ottenuto con la funzione +\func{time} che lo restituisce in nel suddetto formato; il suo prototipo è: +\begin{prototype}{time.h}{time\_t time(time\_t *t)} + Legge il valore corrente del \textit{calendar time}. + + \bodydesc{La funzione ritorna valore del \textit{calendar time} in caso di + successo e -1 in caso di errore, che può essere solo \macro{EFAULT}.} +\end{prototype} +\noindent dove \param{t}, se non nullo, è l'indirizzo su cui salvare il valore +di ritorno. + +Analoga a \func{time} è la funzione \func{stime} che serve per effettuare +l'operazione inversa, e cioè per settare l'orologio di sistema; il suo +prototipo è: +\begin{prototype}{time.h}{int stime(time\_t *t)} + Setta a \param{t} il valore corrente del \textit{calendar time}. + + \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore, + che può essere \macro{EFAULT} o \macro{EPERM}.} +\end{prototype} + +Dato che modificare l'ora ha un impatto su tutto il sistema, la funzione può +essere usata solo dall'ammninistratore. + + +Dato che il tempo misurato in termini di\type{time\_t} ha comunque una +risoluzione massima di un secondo le \acr{glibc} provvedono delle +rappresentazioni alternative che consentono di indicare intervalli o tempi con +precisioni maggiori del secondo, queste sono realizzate attraverso le +strutture \var{timeval} e \var{timespec}, le cui definizioni sono riportate in +\figref{fig:sys_timeval_struct}, che consentono rispettivamente precisioni del +microsecondo e del nanosecondo\footnote{la precisione è solo astratta, + l'orologio di sistema normalmente non è in grado di misuare dei tempi con + precisioni simili.}. \begin{figure}[!htb] @@ -1826,16 +1858,29 @@ quando necessita manipolare \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{} struct timeval { - long tv_sec; /* seconds */ - long tv_usec; /* microseconds */ + long tv_sec; /* seconds */ + long tv_usec; /* microseconds */ +}; +struct timespec { + time_t tv_sec; /* seconds */ + long tv_nsec; /* nanoseconds */ }; \end{lstlisting} \end{minipage} \normalsize - \caption{La struttura \var{timeval} per il calendar time.} + \caption{Le strutture \var{timeval} e \var{timespec} per il calendar time.} \label{fig:sys_timeval_struct} \end{figure} +Data la scarsa precisione nell'uso di \type{time\_t} per le operazioni sui +tempi di norma l'uso delle funzioni precedenti è di norma sconsigliato, ed +esse sono di solito sostituite da \func{gettimeofday} e \func{settimeofday} + + + + +\subsection{Le \textit{timezone} e la gestione delle date.} +\label{sec:sys_time_base}