Correzioni varie
[gapil.git] / system.tex
index fd0284d05b0bb478454b75868ad852c70142c0d9..01930a0c182364ce5e07db72c671b1ace60f7668 100644 (file)
@@ -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}