\subsection{Limiti e parametri di sistema}
\label{sec:sys_limits}
-Quando si devono determinare le le caratteristiche generali del sistema ci si
+Quando si devono determinare le caratteristiche generali del sistema ci si
trova di fronte a diverse possibilità; alcune di queste infatti possono
dipendere dall'architettura dell'hardware (come le dimensioni dei tipi
interi), o dal sistema operativo (come la presenza o meno del gruppo degli
\begin{table}[htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|r|p{8cm}|}
+ \begin{tabular}[c]{|l|r|p{7cm}|}
\hline
\textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
\hline
\begin{table}[htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|r|p{8cm}|}
+ \begin{tabular}[c]{|l|r|p{7cm}|}
\hline
\textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
\hline
In generale si dovrebbe fare uso di \func{sysconf} solo quando la relativa
macro non è definita, quindi con un codice analogo al seguente:
%\footnotesize
-\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
+\begin{lstlisting}[stepnumber=0,frame=]{}
get_child_max(void)
{
#ifdef CHILD_MAX
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct utsname {
char sysname[];
char nodename[];
\end{functions}
I parametri a cui la funzione permettere di accedere sono organizzati in
-maniera gerarchica all'interno un albero;\footnote{si tenga presente che
+maniera gerarchica all'interno di un albero;\footnote{si tenga presente che
includendo solo \file{unistd.h}, saranno definiti solo i parametri generici;
dato che ce ne sono molti specifici dell'implementazione, nel caso di Linux
occorrerà includere anche i file \file{linux/unistd.h} e
attraverso l'array \param{name}, di lunghezza \param{nlen}, che contiene la
sequenza dei vari nodi da attraversare. Ogni parametro ha un valore in un
formato specifico che può essere un intero, una stringa o anche una struttura
-complessa, per questo motivo il valori vengono passati come puntatori
+complessa, per questo motivo i valori vengono passati come puntatori
\ctyp{void}.
L'indirizzo a cui il valore corrente del parametro deve essere letto è
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct statfs {
long f_type; /* tipo di filesystem */
long f_bsize; /* dimensione ottimale dei blocchi di I/O */
\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct passwd {
char *pw_name; /* user name */
char *pw_passwd; /* user password */
\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct group {
char *gr_name; /* group name */
char *gr_passwd; /* group password */
\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct utmp
{
short int ut_type; /* Type of login. */
\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
può modificarne il valore. Il valore di questi limiti è mantenuto in una
struttura \struct{rlimit}, la cui definizione è riportata in
\figref{fig:sys_rlimit_struct}, ed i cui campi corrispondono appunto a limite
-corrente e massimo.
+corrente e limite massimo.
\begin{figure}[!htb]
\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct rlimit {
rlim_t rlim_cur;
rlim_t rlim_max;
evitare la creazione di \file{core} file (al proposito si veda
\secref{sec:sig_prog_error}).}
-Nello specificare un limite, oltre a dei valori specifici, si può anche usare
-la costante \const{RLIM\_INFINITY} che permette di sbloccare l'uso di una
-risorsa; ma si ricordi che solo un processo con i privilegi di amministratore
-può innalzare un limite al di sopra del valore corrente del limite massimo. Si
-tenga conto infine che tutti i limiti vengono ereditati dal processo padre
-attraverso una \func{fork} (vedi \secref{sec:proc_fork}) e mantenuti per gli
-altri programmi eseguiti attraverso una \func{exec} (vedi
+Nello specificare un limite, oltre a fornire dei valori specifici, si può
+anche usare la costante \const{RLIM\_INFINITY} che permette di sbloccare l'uso
+di una risorsa; ma si ricordi che solo un processo con i privilegi di
+amministratore può innalzare un limite al di sopra del valore corrente del
+limite massimo. Si tenga conto infine che tutti i limiti vengono ereditati dal
+processo padre attraverso una \func{fork} (vedi \secref{sec:proc_fork}) e
+mantenuti per gli altri programmi eseguiti attraverso una \func{exec} (vedi
\secref{sec:proc_exec}).
\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct tms {
clock_t tms_utime; /* user time */
clock_t tms_stime; /* system time */
verranno considerati nel calcolo di questi tempi.
-
\subsection{Le funzioni per il \textit{calendar time}}
\label{sec:sys_time_base}
corrisponde ad un tipo elementare (in Linux è definito come \ctyp{long int},
che di norma corrisponde a 32 bit). Il valore corrente del \textit{calendar
time}, che indicheremo come \textsl{tempo di sistema}, può essere ottenuto
-con la funzione \funcd{time} che lo restituisce in nel suddetto formato; il
-suo prototipo è:
+con la funzione \funcd{time} che lo restituisce nel suddetto formato; il suo
+prototipo è:
\begin{prototype}{time.h}{time\_t time(time\_t *t)}
Legge il valore corrente del \textit{calendar time}.
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct timeval
{
long tv_sec; /* seconds */
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct timex {
unsigned int modes; /* mode selector */
long int offset; /* time offset (usec) */
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
\footnotesize
\centering
\begin{minipage}[c]{15cm}
- \begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
+ \begin{lstlisting}[stepnumber=0]{}
extern char *tzname[2];
extern long timezone;
extern int daylight;