\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
\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
\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
\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]
\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}