\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/ustname.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/statfs.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/passwd.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/group.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/utmp.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/rusage.h}
\end{minipage}
\normalsize
\errcode{ENOMEM}, mentre se il superamento viene
causato dalla crescita dello \itindex{stack}
\textit{stack} il processo riceverà un segnale di
- \const{SIGSEGV}.\\
+ \signal{SIGSEGV}.\\
\const{RLIMIT\_CORE} & La massima dimensione per di un file di
\itindex{core~dump} \textit{core dump} (vedi
sez.~\ref{sec:sig_prog_error}) creato nella
sez.~\ref{sec:sys_cpu_times}) che il processo può
usare. Il superamento del limite corrente
comporta l'emissione di un segnale di
- \const{SIGXCPU}, la cui azione predefinita (vedi
+ \signal{SIGXCPU}, la cui azione predefinita (vedi
sez.~\ref{sec:sig_classification}) è terminare
il processo, una volta al secondo fino al
raggiungimento del limite massimo. Il
superamento del limite massimo
comporta l'emissione di un segnale di
- \const{SIGKILL}.\footnotemark\\
+ \signal{SIGKILL}.\footnotemark\\
\const{RLIMIT\_DATA} & La massima dimensione del \index{segmento!dati}
segmento dati di un
processo (vedi sez.~\ref{sec:proc_mem_layout}).
\const{RLIMIT\_FSIZE} & La massima dimensione di un file che un processo
può creare. Se il processo cerca di scrivere
oltre questa dimensione riceverà un segnale di
- \const{SIGXFSZ}, che di norma termina il
+ \signal{SIGXFSZ}, che di norma termina il
processo; se questo viene intercettato la
system call che ha causato l'errore fallirà con
un errore di \errcode{EFBIG}.\\
\textit{stack} del processo. Se il processo
esegue operazioni che estendano lo
\textit{stack} oltre questa dimensione
- riceverà un segnale di \const{SIGSEGV}.\\
+ riceverà un segnale di \signal{SIGSEGV}.\\
\const{RLIMIT\_RSS} & L'ammontare massimo di pagine di memoria dato al
\index{segmento!testo} testo del processo. Il
limite è solo una indicazione per il kernel,
oggi (la 2.6.x); altri kernel possono avere comportamenti diversi per quanto
avviene quando viene superato il \textit{soft limit}; perciò per avere
operazioni portabili è sempre opportuno intercettare il primo
- \const{SIGXCPU} e terminare in maniera ordinata il processo.}
+ \signal{SIGXCPU} e terminare in maniera ordinata il processo.}
\footnotetext{il limite su questa risorsa è stato introdotto con il kernel
2.6.8.}
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/rlimit.h}
\end{minipage}
\normalsize
valore massimo corrispondente a circa 72 minuti, dopo i quali il contatore
riprenderà lo stesso valore iniziale.
+% TODO questi valori sono obsoleti, verificare il tutto.
+
Come accennato in sez.~\ref{sec:sys_unix_time} il tempo di CPU è la somma di
altri due tempi, l'\textit{user time} ed il \textit{system time} che sono
quelli effettivamente mantenuti dal kernel per ciascun processo. Questi
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/tms.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/timex.h}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/tm.h}
\end{minipage}
\normalsize
Come mostrato in fig.~\ref{fig:sys_tm_struct} il \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 attraverso le tre
-variabili globali mostrate in fig.~\ref{fig:sys_tzname}, cui si accede quando
-si include \file{time.h}. Queste variabili vengono impostate quando si chiama
-una delle precedenti funzioni di conversione, oppure invocando direttamente la
-funzione \funcd{tzset}, il cui prototipo è:
+\index{variabili!globali} variabili globali mostrate in
+fig.~\ref{fig:sys_tzname}, cui si accede quando si include
+\file{time.h}. Queste variabili vengono impostate quando si chiama una delle
+precedenti funzioni di conversione, oppure invocando direttamente la funzione
+\funcd{tzset}, il cui prototipo è:
\begin{prototype}{sys/timex.h}
{void tzset(void)}
\begin{figure}[!htb]
\footnotesize
\centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/time_zone_var.c}
\end{minipage}
\normalsize
- \caption{Le variabili globali usate per la gestione delle \textit{time
- zone}.}
+ \caption{Le \index{variabili!globali} variabili globali usate per la
+ gestione delle \textit{time zone}.}
\label{fig:sys_tzname}
\end{figure}
costante \val{EOF} (a seconda della funzione); ma questo valore segnala solo
che c'è stato un errore, non il tipo di errore.
-Per riportare il tipo di errore il sistema usa la variabile globale
-\var{errno},\footnote{l'uso di una variabile globale può comportare alcuni
- problemi (ad esempio nel caso dei \itindex{thread} \textit{thread}) ma lo
- standard ISO C consente anche di definire \var{errno} come un
- \textit{modifiable lvalue}, quindi si può anche usare una macro, e questo è
- infatti il modo usato da Linux per renderla locale ai singoli
+Per riportare il tipo di errore il sistema usa \index{variabili!globali} la
+variabile globale \var{errno},\footnote{l'uso di una variabile globale può
+ comportare alcuni problemi (ad esempio nel caso dei \itindex{thread}
+ \textit{thread}) ma lo standard ISO C consente anche di definire \var{errno}
+ come un \textit{modifiable lvalue}, quindi si può anche usare una macro, e
+ questo è infatti il modo usato da Linux per renderla locale ai singoli
\itindex{thread} \textit{thread}.} definita nell'header \file{errno.h}; la
variabile è in genere definita come \direct{volatile} dato che può essere
cambiata in modo asincrono da un segnale (si veda sez.~\ref{sec:sig_sigchld}
\param{message} viene stampato prima del messaggio d'errore, seguita dai due
punti e da uno spazio, il messaggio è terminato con un a capo.
-Il messaggio può essere riportato anche usando le due variabili globali:
+Il messaggio può essere riportato anche usando le due
+\index{variabili!globali} variabili globali:
\includecodesnip{listati/errlist.c}
dichiarate in \file{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 questa stringa è sostanzialmente
equivalente a quello di \func{strerror}.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/errcode_mess.c}
\end{minipage}
\normalsize
relativi argomenti devono essere forniti allo stesso modo, mentre
\param{errnum} indica l'errore che si vuole segnalare (non viene quindi usato
il valore corrente di \var{errno}); la funzione stampa sullo standard error il
-nome del programma, come indicato dalla variabile globale \var{program\_name},
-seguito da due punti ed uno spazio, poi dalla stringa generata da
+nome del programma, come indicato dalla \index{variabili!globali} variabile
+globale \var{program\_name}, seguito da due punti ed uno spazio, poi dalla
+stringa generata da
\param{format} e dagli argomenti seguenti, seguita da due punti ed uno spazio
infine il messaggio di errore relativo ad \param{errnum}, il tutto è terminato
da un a capo.
programma in caso di errore, nel qual caso \func{error} dopo la stampa del
messaggio di errore chiama \func{exit} con questo stato di uscita. Se invece
il valore è nullo \func{error} ritorna normalmente ma viene incrementata
-un'altra variabile globale, \var{error\_message\_count}, che tiene conto di
-quanti errori ci sono stati.
+un'altra \index{variabili!globali} variabile globale,
+\var{error\_message\_count}, che tiene conto di quanti errori ci sono stati.
Un'altra funzione per la stampa degli errori, ancora più sofisticata, che
prende due argomenti aggiuntivi per indicare linea e file su cui è avvenuto
\noindent ed il suo comportamento è identico a quello di \func{error} se non
per il fatto che, separati con il solito due punti-spazio, vengono inseriti un
nome di file indicato da \param{fname} ed un numero di linea subito dopo la
-stampa del nome del programma. Inoltre essa usa un'altra variabile globale,
-\var{error\_one\_per\_line}, che impostata ad un valore diverso da zero fa si
-che errori relativi alla stessa linea non vengano ripetuti.
+stampa del nome del programma. Inoltre essa usa un'altra
+\index{variabili!globali} variabile globale, \var{error\_one\_per\_line}, che
+impostata ad un valore diverso da zero fa si che errori relativi alla stessa
+linea non vengano ripetuti.
% LocalWords: filesystem like kernel saved header limits sysconf sez tab float