Merge branch 'master' of ssh://gapil.gnulinux.it/srv/git/gapil
[gapil.git] / system.tex
index bd60d40fb574b7261ae83d92750ec402e9c835e3..a761b4dcd31e2431c3ea9f19294975863f1ee21f 100644 (file)
@@ -32,14 +32,14 @@ l'implementazione del kernel e delle librerie, le opzioni di
 configurazione. Il kernel inoltre mette a disposizione l'accesso ad alcuni
 parametri che possono modificarne il comportamento.
 
 configurazione. Il kernel inoltre mette a disposizione l'accesso ad alcuni
 parametri che possono modificarne il comportamento.
 
-La definizione di queste caratteristiche ed il tentativo di provvedere dei
+La definizione di queste caratteristiche ed il tentativo di fornire dei
 meccanismi generali che i programmi possono usare per ricavarle è uno degli
 aspetti più complessi e controversi con cui le diverse standardizzazioni si
 meccanismi generali che i programmi possono usare per ricavarle è uno degli
 aspetti più complessi e controversi con cui le diverse standardizzazioni si
-sono dovute confrontare, spesso con risultati spesso tutt'altro che chiari.
-Daremo comunque una descrizione dei principali metodi previsti dai vari
-standard per ricavare sia le caratteristiche specifiche del sistema, che
-quelle della gestione dei file e prenderemo in esame le modalità con cui è
-possibile intervenire sui parametri del kernel.
+sono dovute confrontare, con risultati spesso tutt'altro che chiari.  Daremo
+comunque una descrizione dei principali metodi previsti dai vari standard per
+ricavare sia le caratteristiche specifiche del sistema che quelle della
+gestione dei file, e prenderemo in esame le modalità con cui è possibile
+intervenire sui parametri del kernel.
 
 \subsection{Limiti e caratteristiche del sistema}
 \label{sec:sys_limits}
 
 \subsection{Limiti e caratteristiche del sistema}
 \label{sec:sys_limits}
@@ -58,16 +58,17 @@ sono necessari due tipi diversi di funzionalità:
 \item la possibilità di determinare limiti ed opzioni durante l'esecuzione.
 \end{itemize*}
 
 \item la possibilità di determinare limiti ed opzioni durante l'esecuzione.
 \end{itemize*}
 
-La prima funzionalità si può ottenere includendo gli opportuni header file che
-contengono le costanti necessarie definite come macro di preprocessore, per la
-seconda invece sono ovviamente necessarie delle funzioni. La situazione è
-complicata dal fatto che ci sono molti casi in cui alcuni di questi limiti
-sono fissi in un'implementazione mentre possono variare in un altra: tutto
-questo crea una ambiguità che non è sempre possibile risolvere in maniera
-chiara. In generale quello che succede è che quando i limiti del sistema sono
-fissi essi vengono definiti come macro di preprocessore nel file
-\headfile{limits.h}, se invece possono variare, il loro valore sarà ottenibile
-tramite la funzione \func{sysconf} (che esamineremo a breve).
+La prima funzionalità si può ottenere includendo gli opportuni file di
+intestazione che contengono le costanti necessarie definite come macro di
+preprocessore, per la seconda invece sono ovviamente necessarie delle
+funzioni. La  situazione è complicata dal fatto che ci sono molti casi in cui
+alcuni di questi limiti sono fissi in un'implementazione mentre possono
+variare in un altra: tutto questo crea una ambiguità che non è sempre
+possibile risolvere in maniera chiara. In generale quello che succede è che
+quando i limiti del sistema sono fissi essi vengono definiti come macro di
+preprocessore nel file \headfile{limits.h}, se invece possono variare, il loro
+valore sarà ottenibile tramite la funzione \func{sysconf} (che esamineremo a
+breve).
 
 \begin{table}[htb]
   \centering
 
 \begin{table}[htb]
   \centering
@@ -151,7 +152,7 @@ sez.~\ref{sec:sys_file_limits}.
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|r|p{8cm}|}
+  \begin{tabular}[c]{|l|r|p{9cm}|}
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
@@ -187,7 +188,7 @@ file, riportate in tab.~\ref{tab:sys_file_macro}.
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|r|p{8cm}|}
+  \begin{tabular}[c]{|l|r|p{9cm}|}
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
@@ -247,7 +248,7 @@ valori ottenuti da \func{sysconf}.
 \begin{table}[htb]
   \centering
   \footnotesize
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{8cm}|}
+  \begin{tabular}[c]{|l|p{9cm}|}
     \hline
     \textbf{Macro}&\textbf{Significato}\\
     \hline
     \hline
     \textbf{Macro}&\textbf{Significato}\\
     \hline
@@ -370,12 +371,12 @@ relative spiegazioni, si può trovare nel manuale della \acr{glibc}.
 \end{table}
 
 In generale ogni limite o caratteristica del sistema per cui è definita una
 \end{table}
 
 In generale ogni limite o caratteristica del sistema per cui è definita una
-macro, sia dagli standard ANSI C e ISO C90, che da POSIX.1 e POSIX.2, può
-essere ottenuto attraverso una chiamata a \func{sysconf}. Il nome della
-costante da utilizzare come valore dell'argomento \param{name} si otterrà
-aggiungendo \code{\_SC\_} ai nomi delle costanti definite dai primi due
-standard (quelle di tab.~\ref{tab:sys_generic_macro}), o sostituendolo a
-\code{\_POSIX\_} per le costanti definite dagli altri due standard (quelle di
+macro, sia da ANSI C e ISO C90 che da POSIX.1 e POSIX.2, può essere ottenuto
+attraverso una chiamata a \func{sysconf}. Il nome della costante da utilizzare
+come valore dell'argomento \param{name} si otterrà aggiungendo \code{\_SC\_}
+ai nomi delle costanti definite dai primi due standard (quelle di
+tab.~\ref{tab:sys_generic_macro}), o sostituendolo a \code{\_POSIX\_} per le
+costanti definite dagli altri due standard (quelle di
 tab.~\ref{tab:sys_posix1_general}).
 
 In linea teorica si dovrebbe fare uso di \func{sysconf} solo quando la
 tab.~\ref{tab:sys_posix1_general}).
 
 In linea teorica si dovrebbe fare uso di \func{sysconf} solo quando la
@@ -516,8 +517,10 @@ BSD4.4 ed introdotta su Linux a partire dal kernel 1.3.57, ma oggi il suo uso
 esistere, ma non dispone più di una interfaccia nella \acr{glibc} ed il suo
 utilizzo può essere effettuato solo tramite \func{syscall}, ma di nuovo questo
 viene sconsigliato in quanto la funzionalità non è più mantenuta e molto
 esistere, ma non dispone più di una interfaccia nella \acr{glibc} ed il suo
 utilizzo può essere effettuato solo tramite \func{syscall}, ma di nuovo questo
 viene sconsigliato in quanto la funzionalità non è più mantenuta e molto
-probabilmente sarà rimossa nel prossimo futuro. Per questo motivo eviteremo di
-trattarne i particolari.
+probabilmente sarà rimossa nel prossimo futuro.\footnote{a partire dal kernel
+  2.6.34 la funzione viene inserita nella compilazione del kernel previa
+  esplicita richiesta, ed il suo uso produce avvertimenti nei log del kernel.}
+Per questo motivo eviteremo di trattarne i particolari.
 
 Lo scopo di \funcm{sysctl} era quello di fornire ai programmi una modalità per
 modificare i parametri di sistema. Questi erano organizzati in maniera
 
 Lo scopo di \funcm{sysctl} era quello di fornire ai programmi una modalità per
 modificare i parametri di sistema. Questi erano organizzati in maniera
@@ -531,33 +534,36 @@ moduli che sono stati caricati nel sistema. Inoltre non essendo standardizzati
 i loro nomi possono variare da una versione di kernel all'altra, alcuni esempi
 di questi parametri sono:
 \begin{itemize*}
 i loro nomi possono variare da una versione di kernel all'altra, alcuni esempi
 di questi parametri sono:
 \begin{itemize*}
-\item il nome di dominio
-\item i parametri del meccanismo di \textit{paging}.
-\item il filesystem montato come radice
-\item la data di compilazione del kernel
-\item i parametri dello stack TCP
-\item il numero massimo di file aperti
+\item il nome di dominio,
+\item i parametri del meccanismo di \textit{paging},
+\item il filesystem montato come radice,
+\item la data di compilazione del kernel,
+\item i parametri dello stack TCP,
+\item il numero massimo di file aperti,
+\item il numero massimo di processi,
+\item i parametri del \textit{SystemV IPC} (vedi sez.~\ref{sec:ipc_sysv}).
 \end{itemize*}
 \end{itemize*}
-
-
+%\noindent e molti altri che abbiamo già incontrato 
 
 \index{file!filesystem~\texttt  {/proc}!definizione|(}
 
 Dato che fin dall'inizio i parametri erano organizzati in una struttura
 
 \index{file!filesystem~\texttt  {/proc}!definizione|(}
 
 Dato che fin dall'inizio i parametri erano organizzati in una struttura
-albero, è parso naturale rimappare questa organizzazione utilizzando il
-filesystem \file{/proc}. Questo è un filesystem completamente virtuale, il cui
-contenuto è generato direttamente dal kernel, che non fa riferimento a nessun
-dispositivo fisico, ma presenta in forma di file e directory i dati di alcune
-delle strutture interne del kernel stesso. Il suo utilizzo principale, come
-denuncia il nome stesso, è quello di fornire una interfaccia per ottenere i
-dati relativi ai processi (venne introdotto a questo scopo su BSD), ma nel
-corso del tempo il suo uso è stato ampliato.
+albero, è parso naturale riportare questa organizzazione all'interno del
+filesystem \file{/proc}. Questo è un filesystem virtuale il cui contenuto è
+generato direttamente dal kernel, che non fa riferimento a nessun dispositivo
+fisico, ma presenta in forma di file e directory i dati di alcune delle
+strutture interne del kernel. Il suo utilizzo principale, come denuncia il
+nome stesso, è quello di fornire una interfaccia per ottenere i dati relativi
+ai processi (venne introdotto a questo scopo su BSD), ma nel corso del tempo
+il suo uso è stato ampliato.
 
 All'interno di questo filesystem sono pertanto presenti una serie di file che
 riflettono il contenuto dei parametri del kernel (molti dei quali accessibili
 in sola lettura) e in altrettante directory, nominate secondo il relativo
 \ids{PID}, vengono mantenute le informazioni relative a ciascun processo
 
 All'interno di questo filesystem sono pertanto presenti una serie di file che
 riflettono il contenuto dei parametri del kernel (molti dei quali accessibili
 in sola lettura) e in altrettante directory, nominate secondo il relativo
 \ids{PID}, vengono mantenute le informazioni relative a ciascun processo
-attivo nel sistema.
+attivo nel sistema (abbiamo già incontrato questa caratteristica in
+sez.~\ref{sec:file_openat} per accedere ai filedescriptor del processo
+stesso).
 
 In particolare l'albero dei valori dei parametri di sistema impostabili con
 \func{sysctl} viene presentato in forma di una gerarchia di file e directory a
 
 In particolare l'albero dei valori dei parametri di sistema impostabili con
 \func{sysctl} viene presentato in forma di una gerarchia di file e directory a
@@ -579,8 +585,8 @@ l'accesso, con altrettante corrispondenze ai file presenti in
 ma vista la assoluta naturalità dell'interfaccia, e la sua maggiore
 efficienza, nelle versioni più recenti del kernel questa è diventata la
 modalità canonica per modificare i parametri del kernel, evitando di dover
 ma vista la assoluta naturalità dell'interfaccia, e la sua maggiore
 efficienza, nelle versioni più recenti del kernel questa è diventata la
 modalità canonica per modificare i parametri del kernel, evitando di dover
-ricorrere all'uso di una \textit{system call} specifica che pur essendo ancora
-presente, prima o poi verrà eliminata.
+ricorrere all'uso di una \textit{system call} specifica, che pur essendo
+ancora presente prima o poi verrà eliminata.
 
 Nonostante la semplificazione nella gestione ottenuta con l'uso di
 \file{/proc/sys} resta il problema generale di conoscere il significato di
 
 Nonostante la semplificazione nella gestione ottenuta con l'uso di
 \file{/proc/sys} resta il problema generale di conoscere il significato di
@@ -661,8 +667,6 @@ trovano sotto la directory \file{/proc/sys/kernel/}.
 
 \index{file!filesystem~\texttt  {/proc}!definizione|)}
 
 
 \index{file!filesystem~\texttt  {/proc}!definizione|)}
 
-
-
 \section{La gestione del sistema}
 \label{sec:sys_management}
 
 \section{La gestione del sistema}
 \label{sec:sys_management}
 
@@ -681,11 +685,11 @@ Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi
 directory, ecc.)  venivano registrate all'interno dei due file di testo
 \conffiled{/etc/passwd} ed \conffiled{/etc/group}, il cui formato è descritto
 dalle relative pagine del manuale\footnote{nella quinta sezione, quella dei
 directory, ecc.)  venivano registrate all'interno dei due file di testo
 \conffiled{/etc/passwd} ed \conffiled{/etc/group}, il cui formato è descritto
 dalle relative pagine del manuale\footnote{nella quinta sezione, quella dei
-  file di configurazione (esistono comandi corrispondenti), una trattazione
-  sistemistica dell'intero argomento coperto in questa sezione si consulti
-  sez.~4.3 di \cite{AGL}.} e tutte le funzioni che richiedevano l'accesso a
-queste informazione andavano a leggere direttamente il contenuto di questi
-file.
+  file di configurazione, dato che esistono comandi corrispondenti; per una
+  trattazione sistemistica dell'intero argomento coperto in questa sezione si
+  consulti sez.~4.3 di \cite{AGL}.} e tutte le funzioni che richiedevano
+l'accesso a queste informazione andavano a leggere direttamente il contenuto
+di questi file.
 
 In realtà oltre a questi due file da molto tempo gran parte dei sistemi
 unix-like usano il cosiddetto sistema delle \textit{shadow password} che
 
 In realtà oltre a questi due file da molto tempo gran parte dei sistemi
 unix-like usano il cosiddetto sistema delle \textit{shadow password} che
@@ -701,26 +705,29 @@ la maggior parte delle distribuzioni di GNU/Linux usa la libreria PAM (sigla
 che sta per \textit{Pluggable Authentication Method}) che fornisce una
 interfaccia comune per i processi di autenticazione, svincolando completamente
 le singole applicazioni dai dettagli del come questa viene eseguita e di dove
 che sta per \textit{Pluggable Authentication Method}) che fornisce una
 interfaccia comune per i processi di autenticazione, svincolando completamente
 le singole applicazioni dai dettagli del come questa viene eseguita e di dove
-vengono mantenuti i dati relativi. Si tratta di un sistema modulare, in cui è
-possibile utilizzare anche più meccanismi insieme, diventa così possibile
-avere vari sistemi di riconoscimento (biometria, chiavi hardware, ecc.),
-diversi formati per le password e diversi supporti per le informazioni. Il
-tutto avviene in maniera trasparente per le applicazioni purché per ciascun
-meccanismo si disponga della opportuna libreria che implementa l'interfaccia
-di PAM.
+vengono mantenuti i dati relativi.
+
+Si tratta  di un  sistema modulare,  in cui è  possibile utilizzare  anche più
+meccanismi   insieme,   diventa  così   possibile   avere   vari  sistemi   di
+riconoscimento  (biometria, chiavi  hardware,  ecc.), diversi  formati per  le
+password e diversi  supporti per le informazioni. Il tutto  avviene in maniera
+trasparente  per le  applicazioni purché  per ciascun  meccanismo si  disponga
+della opportuna libreria che implementa l'interfaccia di PAM.
 
 Dall'altra parte, il diffondersi delle reti e la necessità di centralizzare le
 informazioni degli utenti e dei gruppi per insiemi di macchine e servizi
 all'interno di una stessa organizzazione, in modo da mantenere coerenti i
 dati, ha portato anche alla necessità di poter recuperare e memorizzare dette
 informazioni su supporti diversi dai file citati, introducendo il sistema del
 
 Dall'altra parte, il diffondersi delle reti e la necessità di centralizzare le
 informazioni degli utenti e dei gruppi per insiemi di macchine e servizi
 all'interno di una stessa organizzazione, in modo da mantenere coerenti i
 dati, ha portato anche alla necessità di poter recuperare e memorizzare dette
 informazioni su supporti diversi dai file citati, introducendo il sistema del
-\textit{Name Service Switch} (che tratteremo brevemente in
-sez.~\ref{sec:sock_resolver}) dato che la sua applicazione è cruciale nella
+\textit{Name Service Switch}che tratteremo brevemente in
+sez.~\ref{sec:sock_resolver} dato che la sua applicazione è cruciale nella
 procedura di risoluzione di nomi di rete.
 
 In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
 procedura di risoluzione di nomi di rete.
 
 In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
-completamente quelle relative all'autenticazione. 
+completamente quelle relative all'autenticazione.\footnote{la cui
+  programmazione ormai attiene all'uso dell'interfaccia di PAM, che va al di
+  la dello scopo di questo testo.}
 %  Per questo non tratteremo
 % affatto l'interfaccia di PAM, ma approfondiremo invece il sistema del
 % \textit{Name Service Switch}, un meccanismo messo a disposizione dalla
 %  Per questo non tratteremo
 % affatto l'interfaccia di PAM, ma approfondiremo invece il sistema del
 % \textit{Name Service Switch}, un meccanismo messo a disposizione dalla
@@ -814,7 +821,7 @@ illustrato in sez.~\ref{sec:sys_errno}) per cui se lo si vuole utilizzare è
 opportuno inizializzarlo a zero prima di invocare le funzioni per essere
 sicuri di non avere un residuo di errore da una chiamata precedente. Il non
 aver trovato l'utente richiesto infatti può essere dovuto a diversi motivi (a
 opportuno inizializzarlo a zero prima di invocare le funzioni per essere
 sicuri di non avere un residuo di errore da una chiamata precedente. Il non
 aver trovato l'utente richiesto infatti può essere dovuto a diversi motivi (a
-partire dal fatto che non esista) per cui si possono ottenere i valori di
+partire dal fatto che non esista) per cui si possono ottenere i codici di
 errore più vari a seconda dei casi.
 
 Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e
 errore più vari a seconda dei casi.
 
 Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e
@@ -970,15 +977,15 @@ informazioni sono descritte in dettaglio nel manuale della \acr{glibc}.
 
 Questi file non devono mai essere letti direttamente, ma le informazioni che
 contengono possono essere ricavate attraverso le opportune funzioni di
 
 Questi file non devono mai essere letti direttamente, ma le informazioni che
 contengono possono essere ricavate attraverso le opportune funzioni di
-libreria. Queste sono analoghe alle precedenti funzioni (vedi
-tab.~\ref{tab:sys_passwd_func}) usate per accedere al registro degli utenti,
-solo che in questo caso la struttura del registro della \textsl{contabilità} è
-molto più complessa, dato che contiene diversi tipi di informazione.
+libreria. Queste sono analoghe alle precedenti funzioni usate per accedere al
+registro degli utenti (vedi tab.~\ref{tab:sys_passwd_func}), solo che in
+questo caso la struttura del registro della \textsl{contabilità} è molto più
+complessa, dato che contiene diversi tipi di informazione.
 
 Le prime tre funzioni, \funcd{setutent}, \funcd{endutent} e \funcd{utmpname}
 servono rispettivamente a aprire e a chiudere il file che contiene il registro
 della \textsl{contabilità} degli, e a specificare su quale file esso viene
 
 Le prime tre funzioni, \funcd{setutent}, \funcd{endutent} e \funcd{utmpname}
 servono rispettivamente a aprire e a chiudere il file che contiene il registro
 della \textsl{contabilità} degli, e a specificare su quale file esso viene
-mantenuto. I loro prototipi sono:
+mantenuto; i loro prototipi sono:
 
 \begin{funcproto}{
 \fhead{utmp.h} 
 
 \begin{funcproto}{
 \fhead{utmp.h} 
@@ -1151,7 +1158,7 @@ argomenti aggiuntivi, i rispettivi prototipi sono:
 
 Le funzioni si comportano esattamente come le precedenti analoghe non
 rientranti, solo che restituiscono il risultato all'indirizzo specificato dal
 
 Le funzioni si comportano esattamente come le precedenti analoghe non
 rientranti, solo che restituiscono il risultato all'indirizzo specificato dal
-primo argomento aggiuntivo \param{buffer} mentre il secondo, \param{result)}
+primo argomento aggiuntivo \param{buffer} mentre il secondo, \param{result},
 viene usato per restituire il puntatore al buffer stesso.
 
 Infine la \acr{glibc} fornisce altre due funzioni, \funcd{updwtmp} e
 viene usato per restituire il puntatore al buffer stesso.
 
 Infine la \acr{glibc} fornisce altre due funzioni, \funcd{updwtmp} e
@@ -1275,15 +1282,16 @@ illustra i comandi attualmente disponibili:
 \item[\constd{LINUX\_REBOOT\_CMD\_RESTART2}] Viene inviato sulla console il
   messaggio ``\textit{Restarting system with command '\%s'.}'' ed avviata
   immediatamente la procedura di riavvio usando il comando fornito
 \item[\constd{LINUX\_REBOOT\_CMD\_RESTART2}] Viene inviato sulla console il
   messaggio ``\textit{Restarting system with command '\%s'.}'' ed avviata
   immediatamente la procedura di riavvio usando il comando fornito
-  nell'argomento \param{arg} che viene stampato al posto di \textit{'\%s'}
+  nell'argomento \param{arg} che viene stampato al posto di \texttt{'\%s'}
   (veniva usato per lanciare un altro programma al posto di \cmd{init}). Nelle
   versioni recenti questo argomento viene ignorato ed il riavvio può essere
   controllato dall'argomento di avvio del kernel \texttt{reboot=...}  Se non
   si è eseguita una sincronizzazione dei dati su disco con \func{sync} questi
   saranno perduti.
   (veniva usato per lanciare un altro programma al posto di \cmd{init}). Nelle
   versioni recenti questo argomento viene ignorato ed il riavvio può essere
   controllato dall'argomento di avvio del kernel \texttt{reboot=...}  Se non
   si è eseguita una sincronizzazione dei dati su disco con \func{sync} questi
   saranno perduti.
+  % TODO: trattare LINUX_REBOOT_CMD_SW_SUSPEND
+  % TODO: rimandare agli effetti di reboot sui namespace
 \end{basedescript}
 
 \end{basedescript}
 
-
 Come appena illustrato usando il comando \const{LINUX\_REBOOT\_CMD\_KEXEC} si
 può eseguire un riavvio immediato pre-caricando una immagine del kernel, che
 verrà eseguita direttamente. Questo meccanismo consente di evitare la
 Come appena illustrato usando il comando \const{LINUX\_REBOOT\_CMD\_KEXEC} si
 può eseguire un riavvio immediato pre-caricando una immagine del kernel, che
 verrà eseguita direttamente. Questo meccanismo consente di evitare la
@@ -1357,14 +1365,14 @@ che sia effettivamente eseguibile sul proprio processore.
     \hline
     \constd{KEXEC\_ON\_CRASH}        & Il kernel caricato sarà eseguito
                                       automaticamente in caso di crollo del
     \hline
     \constd{KEXEC\_ON\_CRASH}        & Il kernel caricato sarà eseguito
                                       automaticamente in caso di crollo del
-                                      sistema.\\
+                                      sistema (dal kernel 2.6.13).\\
     \constd{KEXEC\_PRESERVE\_CONTEXT}& Viene preservato lo stato dei programmi 
                                       e dei dispositivi prima dell'esecuzione
                                       del nuovo kernel. Viene usato
                                       principalmente per l'ibernazione del
                                       sistema ed ha senso solo se si è
                                       indicato un numero di segmento maggiore
     \constd{KEXEC\_PRESERVE\_CONTEXT}& Viene preservato lo stato dei programmi 
                                       e dei dispositivi prima dell'esecuzione
                                       del nuovo kernel. Viene usato
                                       principalmente per l'ibernazione del
                                       sistema ed ha senso solo se si è
                                       indicato un numero di segmento maggiore
-                                      di zero.\\
+                                      di zero (dal kernel 2.6.27).\\
     \hline
     \constd{KEXEC\_ARCH\_DEFAULT}    & Il kernel caricato verrà eseguito nella
                                       architettura corrente. \\
     \hline
     \constd{KEXEC\_ARCH\_DEFAULT}    & Il kernel caricato verrà eseguito nella
                                       architettura corrente. \\
@@ -1394,30 +1402,14 @@ più in grado di essere eseguito in maniera coerente.  Il secondo valore,
 programmi e dei dispositivi, e viene in genere usato per realizzare la
 cosiddetta ibernazione in RAM.
 
 programmi e dei dispositivi, e viene in genere usato per realizzare la
 cosiddetta ibernazione in RAM.
 
-% TODO: introdotta con il kernel 3.17 è stata introdotta
-% kexec_file_load, per caricare immagine firmate per il secure boot,
-% vedi anche http://lwn.net/Articles/603116/
-
-% TODO documentare keyctl ????
-% (fare sezione dedicata ????)
-
-% TODO documentare la Crypto API del kernel
-
-% TODO documentare la syscall getrandom, introdotta con il kernel 3.17, vedi
-% http://lwn.net/Articles/606141/, ed introdotta con le glibc solo con la
-% versione 2.25, vedi https://lwn.net/Articles/711013/
+% TODO: con il kernel 3.17 è stata introdotta kexec_file_load, per caricare
+% immagine firmate per il secure boot, vedi anche
+% http://lwn.net/Articles/603116/
 
 
-%\subsection{La gestione delle chiavi crittografiche}
-%\label{sec:keyctl_management}
-
-%TODO non è chiaro se farlo qui, ma documentare la syscall bpf aggiunta con il
-% kernel 3.18, vedi http://lwn.net/Articles/612878/; al riguardo vedi anche
-% https://lwn.net/Articles/660331/ 
 
 \section{Il controllo dell'uso delle risorse}
 \label{sec:sys_res_limits}
 
 
 \section{Il controllo dell'uso delle risorse}
 \label{sec:sys_res_limits}
 
-
 Dopo aver esaminato in sez.~\ref{sec:sys_management} le funzioni che
 permettono di controllare le varie caratteristiche, capacità e limiti del
 sistema a livello globale, in questa sezione tratteremo le varie funzioni che
 Dopo aver esaminato in sez.~\ref{sec:sys_management} le funzioni che
 permettono di controllare le varie caratteristiche, capacità e limiti del
 sistema a livello globale, in questa sezione tratteremo le varie funzioni che
@@ -1533,7 +1525,7 @@ sez.~\ref{sec:sys_unix_time}). I campi \var{ru\_minflt} e \var{ru\_majflt}
 servono a quantificare l'uso della memoria virtuale e corrispondono
 rispettivamente al numero di \textit{page fault} (vedi
 sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su disco (i
 servono a quantificare l'uso della memoria virtuale e corrispondono
 rispettivamente al numero di \textit{page fault} (vedi
 sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su disco (i
-cosiddetti \textit{minor page fault}), a quelli che invece han richiesto I/O
+cosiddetti \textit{minor page fault}), a quelli che invece han richiesto I/O
 su disco (detti invece \textit{major page
   fault}).% mentre \var{ru\_nswap} ed al numero di volte che
 % il processo è stato completamente tolto dalla memoria per essere inserito
 su disco (detti invece \textit{major page
   fault}).% mentre \var{ru\_nswap} ed al numero di volte che
 % il processo è stato completamente tolto dalla memoria per essere inserito
@@ -1635,13 +1627,13 @@ limite corrente e limite massimo.
   \label{fig:sys_rlimit_struct}
 \end{figure}
 
   \label{fig:sys_rlimit_struct}
 \end{figure}
 
-Come accennato processo ordinario può alzare il proprio limite corrente fino
-al valore del limite massimo, può anche ridurre, irreversibilmente, il valore
-di quest'ultimo.  Nello specificare un limite, oltre a fornire dei valori
-specifici, si può anche usare la costante \const{RLIM\_INFINITY} che permette
-di sbloccare completamente l'uso di una risorsa. Si ricordi però che solo un
-processo con i privilegi di amministratore\footnote{per essere precisi in
-  questo caso quello che serve è la \textit{capability}
+Come accennato un processo ordinario può alzare il proprio limite corrente
+fino al valore del limite massimo, e può anche ridurre, irreversibilmente, il
+valore di quest'ultimo.  Nello specificare un limite, oltre a fornire dei
+valori specifici, si può anche usare la costante \const{RLIM\_INFINITY} che
+permette di sbloccare completamente l'uso di una risorsa. Si ricordi però che
+solo un processo con i privilegi di amministratore\footnote{per essere precisi
+  in questo caso quello che serve è la \textit{capability}
   \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può
 innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti.
   \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può
 innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti.
@@ -1650,7 +1642,7 @@ Ciascuna risorsa su cui si possono applicare dei limiti è identificata da uno
 specifico valore dell'argomento \param{resource}, i valori possibili per
 questo argomento, ed il significato della risorsa corrispondente, dei
 rispettivi limiti e gli effetti causati dal superamento degli stessi sono
 specifico valore dell'argomento \param{resource}, i valori possibili per
 questo argomento, ed il significato della risorsa corrispondente, dei
 rispettivi limiti e gli effetti causati dal superamento degli stessi sono
-riportati nel seguente elenco:
+riportati nel seguente elenco.
 
 \begin{basedescript}{\desclabelwidth{2.2cm}}%\desclabelstyle{\nextlinelabel}}
 \item[\constd{RLIMIT\_AS}] Questa risorsa indica, in byte, la dimensione
 
 \begin{basedescript}{\desclabelwidth{2.2cm}}%\desclabelstyle{\nextlinelabel}}
 \item[\constd{RLIMIT\_AS}] Questa risorsa indica, in byte, la dimensione
@@ -1690,8 +1682,8 @@ riportati nel seguente elenco:
   dimensione del segmento dati di un processo (vedi
   sez.~\ref{sec:proc_mem_layout}).  Il tentativo di allocare più memoria di
   quanto indicato dal limite corrente causa il fallimento della funzione di
   dimensione del segmento dati di un processo (vedi
   sez.~\ref{sec:proc_mem_layout}).  Il tentativo di allocare più memoria di
   quanto indicato dal limite corrente causa il fallimento della funzione di
-  allocazione eseguita (\func{brk} o \func{sbrk}) con un errore di
-  \errcode{ENOMEM}.
+  allocazione eseguita (\func{brk} o \func{sbrk} e dal kernel 4.7 anche
+  \func{mmap}) con un errore di \errcode{ENOMEM}.
 
 \item[\constd{RLIMIT\_FSIZE}] Questa risorsa indica, in byte, la massima
   dimensione di un file che un processo può usare. Se il processo cerca di
 
 \item[\constd{RLIMIT\_FSIZE}] Questa risorsa indica, in byte, la massima
   dimensione di un file che un processo può usare. Se il processo cerca di
@@ -1749,6 +1741,13 @@ messaggi vuoti che comunque richiede delle risorse di gestione. Questa risorsa
   descriptor farà fallire la funzione (\func{open}, \func{dup}, \func{pipe},
   ecc.) con un errore \errcode{EMFILE}.
 
   descriptor farà fallire la funzione (\func{open}, \func{dup}, \func{pipe},
   ecc.) con un errore \errcode{EMFILE}.
 
+  % TODO: aggiungere Dal 4.5 definisce anche il limite sul numero massimo di
+  % file descriptor che un processo non privilegiato (senza la capacità
+  % \const{CAP\_SYS\_RESOURCE}, vedi sez.~\ref{sec:proc_capabilities}) può
+  % avere in corso di trasmissione verso altri
+  % processi usando i socket Unix-domain (vedi sez.XXX), il limite si applica
+  % si applica a \func{sendmsg}.
+
 \item[\constd{RLIMIT\_NPROC}] Questa risorsa indica il numero massimo di
   processi che possono essere creati dallo stesso utente, che viene
   identificato con l'\ids{UID} reale (vedi sez.~\ref{sec:proc_access_id}) del
 \item[\constd{RLIMIT\_NPROC}] Questa risorsa indica il numero massimo di
   processi che possono essere creati dallo stesso utente, che viene
   identificato con l'\ids{UID} reale (vedi sez.~\ref{sec:proc_access_id}) del
@@ -1818,12 +1817,12 @@ Si noti come le due funzioni \func{getrlimit} e \func{setrlimit} consentano di
 operare solo sul processo corrente. Per questo motivo a partire dal kernel
 2.6.36 (e dalla \acr{glibc} 2.13) è stata introdotta un'altra funzione di
 sistema \funcd{prlimit} il cui scopo è quello di estendere e sostituire le
 operare solo sul processo corrente. Per questo motivo a partire dal kernel
 2.6.36 (e dalla \acr{glibc} 2.13) è stata introdotta un'altra funzione di
 sistema \funcd{prlimit} il cui scopo è quello di estendere e sostituire le
-precedenti.  Il suo prototipo è:
+precedenti; il suo prototipo è:
 
 \begin{funcproto}{
 \fhead{sys/resource.h}
 \fdecl{int prlimit(pid\_t pid, int resource, const struct rlimit *new\_limit,\\
 
 \begin{funcproto}{
 \fhead{sys/resource.h}
 \fdecl{int prlimit(pid\_t pid, int resource, const struct rlimit *new\_limit,\\
-\phantom{int prlimit(}struct rlimit *old\_limit}
+\phantom{int prlimit(}struct rlimit *old\_limit)}
 \fdesc{Legge e imposta i limiti di una risorsa.} 
 }
 
 \fdesc{Legge e imposta i limiti di una risorsa.} 
 }
 
@@ -1842,7 +1841,7 @@ precedenti.  Il suo prototipo è:
 }
 \end{funcproto}
 
 }
 \end{funcproto}
 
-La funzione è specifica di Linux e non portabile; per essere usata richiede
+La funzione è specifica di Linux e non portabile, per essere usata richiede
 che sia stata definita la macro \macro{\_GNU\_SOURCE}. Il primo argomento
 indica il \ids{PID} del processo di cui si vogliono cambiare i limiti e si può
 usare un valore nullo per indicare il processo chiamante.  Per modificare i
 che sia stata definita la macro \macro{\_GNU\_SOURCE}. Il primo argomento
 indica il \ids{PID} del processo di cui si vogliono cambiare i limiti e si può
 usare un valore nullo per indicare il processo chiamante.  Per modificare i
@@ -1861,6 +1860,8 @@ possibile sia leggere che scrivere, anche in contemporanea, i valori dei
 limiti. Il significato dell'argomento \param{resource} resta identico rispetto
 a \func{getrlimit} e \func{setrlimit}, così come i restanti requisiti. 
 
 limiti. Il significato dell'argomento \param{resource} resta identico rispetto
 a \func{getrlimit} e \func{setrlimit}, così come i restanti requisiti. 
 
+% TODO: a bassa priorità, documentare i vari problemi e cambiamenti nella
+% implementazione di queste funzioni dettagliati nella pagina di manuale
 
 \subsection{Le informazioni sulle risorse di memoria e processore}
 \label{sec:sys_memory_res}
 
 \subsection{Le informazioni sulle risorse di memoria e processore}
 \label{sec:sys_memory_res}
@@ -1946,8 +1947,8 @@ attivi); anche queste sono informazioni comunque ottenibili attraverso
 
 Infine la \acr{glibc} riprende da BSD la funzione \funcd{getloadavg} che
 permette di ottenere il carico di processore della macchina, in questo modo è
 
 Infine la \acr{glibc} riprende da BSD la funzione \funcd{getloadavg} che
 permette di ottenere il carico di processore della macchina, in questo modo è
-possibile prendere decisioni su quando far partire eventuali nuovi processi.
-Il suo prototipo è:
+possibile prendere decisioni su quando far partire eventuali nuovi processi,
+il suo prototipo è:
 
 \begin{funcproto}{
 \fhead{stdlib.h}
 
 \begin{funcproto}{
 \fhead{stdlib.h}
@@ -2006,7 +2007,7 @@ prototipo è:
 \end{funcproto}
 
 La funzione attiva il salvataggio dei dati sul file indicato dal
 \end{funcproto}
 
 La funzione attiva il salvataggio dei dati sul file indicato dal
-\textit{pathname} contenuti nella stringa puntata da \param{filename}; la
+\textit{pathname} contenuto nella stringa puntata da \param{filename}; la
 funzione richiede che il processo abbia i privilegi di amministratore (è
 necessaria la \textit{capability} \const{CAP\_SYS\_PACCT}, vedi
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
 funzione richiede che il processo abbia i privilegi di amministratore (è
 necessaria la \textit{capability} \const{CAP\_SYS\_PACCT}, vedi
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
@@ -2333,10 +2334,12 @@ primi 41 secondi) e se il valore del contatore eccede le dimensione del tipo
 Come anticipato in sez.~\ref{sec:sys_unix_time} il \textit{calendar time}
 viene espresso normalmente con una variabile di tipo \type{time\_t}, che
 usualmente corrisponde ad un tipo elementare; in Linux è definito come
 Come anticipato in sez.~\ref{sec:sys_unix_time} il \textit{calendar time}
 viene espresso normalmente con una variabile di tipo \type{time\_t}, che
 usualmente 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 nel suddetto
-formato, il suo prototipo è:
+\ctyp{long int}, che di norma corrisponde a 32 bit, cosa che pone un limite al
+valore massimo esprimibile al 19 gennaio 2038, per ovviare alla cosa nelle
+versioni più recenti viene usato un valore di dimensioni maggiori. 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 nel suddetto formato, il suo prototipo è:
 
 \begin{funcproto}{
 \fhead{time.h}
 
 \begin{funcproto}{
 \fhead{time.h}
@@ -2350,7 +2353,9 @@ formato, il suo prototipo è:
 \end{funcproto}
 
 L'argomento \param{t}, se non nullo, deve essere l'indirizzo di una variabile
 \end{funcproto}
 
 L'argomento \param{t}, se non nullo, deve essere l'indirizzo di una variabile
-su cui duplicare il valore di ritorno.
+su cui duplicare il valore di ritorno, ma il suo uso è considerato obsoleto e
+deve essere sempre specificato come \val{NULL}, nel qual caso la funzione non
+può fallire.
 
 Analoga a \func{time} è la funzione \funcd{stime} che serve per effettuare
 l'operazione inversa, e cioè per impostare il tempo di sistema qualora questo
 
 Analoga a \func{time} è la funzione \funcd{stime} che serve per effettuare
 l'operazione inversa, e cioè per impostare il tempo di sistema qualora questo
@@ -2374,14 +2379,15 @@ sia necessario; il suo prototipo è:
 Dato che modificare l'ora ha un impatto su tutto il sistema il cambiamento
 dell'orologio è una operazione privilegiata e questa funzione può essere usata
 solo da un processo con i privilegi di amministratore (per la precisione la
 Dato che modificare l'ora ha un impatto su tutto il sistema il cambiamento
 dell'orologio è una operazione privilegiata e questa funzione può essere usata
 solo da un processo con i privilegi di amministratore (per la precisione la
-\textit{capability} \const{CAP\_SYS\_TIME}), altrimenti la chiamata fallirà
-con un errore di \errcode{EPERM}.
+\textit{capability} \const{CAP\_SYS\_TIME}, vedi
+sez.~\ref{sec:proc_capabilities}), altrimenti la chiamata fallirà con un
+errore di \errcode{EPERM}.
 
 Data la scarsa precisione nell'uso di \type{time\_t}, che ha una risoluzione
 
 Data la scarsa precisione nell'uso di \type{time\_t}, che ha una risoluzione
-massima di un secondo, quando si devono effettuare operazioni sui tempi di
-norma l'uso delle due funzioni precedenti è sconsigliato, ed esse sono di
-solito sostituite da \funcd{gettimeofday} e \funcd{settimeofday},\footnote{le
-  due funzioni \func{time} e \func{stime} sono più antiche e derivano da SVr4,
+di un secondo, quando si devono effettuare operazioni sui tempi l'uso delle
+due funzioni precedenti è sconsigliato, ed esse sono di solito sostituite da
+\funcd{gettimeofday} e \funcd{settimeofday},\footnote{le due funzioni
+  \func{time} e \func{stime} sono più antiche e derivano da SVr4,
   \func{gettimeofday} e \func{settimeofday} sono state introdotte da BSD, ed
   in BSD4.3 sono indicate come sostitute delle precedenti, \func{gettimeofday}
   viene descritta anche in POSIX.1-2001.} i cui prototipi sono:
   \func{gettimeofday} e \func{settimeofday} sono state introdotte da BSD, ed
   in BSD4.3 sono indicate come sostitute delle precedenti, \func{gettimeofday}
   viene descritta anche in POSIX.1-2001.} i cui prototipi sono:
@@ -2455,7 +2461,6 @@ usare la funzione \funcd{adjtime}, il cui prototipo è:
 }  
 \end{funcproto}
 
 }  
 \end{funcproto}
 
-
 Questa funzione permette di avere un aggiustamento graduale del tempo di
 sistema in modo che esso sia sempre crescente in maniera monotona. Il valore
 indicato nella struttura \struct{timeval} puntata da \param{delta} esprime il
 Questa funzione permette di avere un aggiustamento graduale del tempo di
 sistema in modo che esso sia sempre crescente in maniera monotona. Il valore
 indicato nella struttura \struct{timeval} puntata da \param{delta} esprime il
@@ -2531,9 +2536,10 @@ delle costanti elencate in tab.~\ref{tab:adjtimex_return}.
 La funzione richiede come argomento il puntatore ad una struttura di tipo
 \struct{timex}, la cui definizione, effettuata in \headfiled{sys/timex.h}, è
 riportata in fig.~\ref{fig:sys_timex_struct} per i campi che interessano la
 La funzione richiede come argomento il puntatore ad una struttura di tipo
 \struct{timex}, la cui definizione, effettuata in \headfiled{sys/timex.h}, è
 riportata in fig.~\ref{fig:sys_timex_struct} per i campi che interessano la
-possibilità di essere modificati documentati anche nella pagina di manuale. In
-realtà la struttura è stata estesa con ulteriori campi, i cui valori sono
-utilizzabili solo in lettura, la cui definizione si può trovare direttamente
+possibilità di essere modificati. In realtà la struttura è stata estesa con
+ulteriori campi, i cui valori sono utilizzabili solo in lettura, non riportati
+in fig.~\ref{fig:sys_timex_struct}, i dettagli di questi campi si possono
+recuperare dalla pagina di manuale di \func{adjtimex}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -2556,46 +2562,46 @@ riportate in tab.~\ref{tab:sys_timex_mode}.
 \begin{table}[!htb]
   \footnotesize
   \centering
 \begin{table}[!htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|c|p{8cm}|}
+  \begin{tabular}[c]{|l|p{8cm}|}
     \hline
     \hline
-    \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
+    \textbf{Nome} & \textbf{Significato}\\
     \hline
     \hline
     \hline
     \hline
-    \constd{ADJ\_OFFSET}        & 0x0001 & Imposta la differenza fra il tempo
-                                           reale e l'orologio di sistema: 
-                                           deve essere indicata in microsecondi
-                                           nel campo \var{offset} di
-                                           \struct{timex}.\\ 
-    \constd{ADJ\_FREQUENCY}     & 0x0002 & Imposta la differenza in frequenza
-                                           fra il tempo reale e l'orologio di
-                                           sistema: deve essere indicata
-                                           in parti per milione nel campo
-                                           \var{frequency} di \struct{timex}.\\
-    \constd{ADJ\_MAXERROR}      & 0x0004 & Imposta il valore massimo 
-                                           dell'errore sul tempo, espresso in
-                                           microsecondi nel campo
-                                           \var{maxerror} di \struct{timex}.\\ 
-    \constd{ADJ\_ESTERROR}      & 0x0008 & Imposta la stima dell'errore
-                                           sul tempo, espresso in microsecondi 
-                                           nel campo \var{esterror} di
-                                           \struct{timex}.\\
-    \constd{ADJ\_STATUS}        & 0x0010 & Imposta alcuni valori di stato
-                                           interni usati dal 
-                                           sistema nella gestione
-                                           dell'orologio specificati nel campo
-                                           \var{status} di \struct{timex}.\\ 
-    \constd{ADJ\_TIMECONST}     & 0x0020 & Imposta la larghezza di banda del 
-                                           PLL implementato dal kernel,
-                                           specificato nel campo
-                                           \var{constant} di \struct{timex}.\\ 
-    \constd{ADJ\_TICK}          & 0x4000 & Imposta il valore dei \textit{tick}
-                                           del timer in
-                                           microsecondi, espresso nel campo
-                                           \var{tick} di \struct{timex}.\\  
-    \constd{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Chiede uno spostamento una tantum 
-                                           dell'orologio secondo il valore del
-                                           campo \var{offset} simulando il
-                                           comportamento di \func{adjtime}.\\ 
+    \constd{ADJ\_OFFSET}        & Imposta la differenza fra il tempo
+                                  reale e l'orologio di sistema: 
+                                  deve essere indicata in microsecondi
+                                  nel campo \var{offset} di
+                                  \struct{timex}.\\ 
+    \constd{ADJ\_FREQUENCY}     & Imposta la differenza in frequenza
+                                  fra il tempo reale e l'orologio di
+                                  sistema: deve essere indicata
+                                  in parti per milione nel campo
+                                  \var{frequency} di \struct{timex}.\\
+    \constd{ADJ\_MAXERROR}      & Imposta il valore massimo 
+                                  dell'errore sul tempo, espresso in
+                                  microsecondi nel campo
+                                  \var{maxerror} di \struct{timex}.\\ 
+    \constd{ADJ\_ESTERROR}      & Imposta la stima dell'errore
+                                  sul tempo, espresso in microsecondi 
+                                  nel campo \var{esterror} di
+                                  \struct{timex}.\\
+    \constd{ADJ\_STATUS}        & Imposta alcuni valori di stato
+                                  interni usati dal 
+                                  sistema nella gestione
+                                  dell'orologio specificati nel campo
+                                  \var{status} di \struct{timex}.\\ 
+    \constd{ADJ\_TIMECONST}     & Imposta la larghezza di banda del 
+                                  PLL implementato dal kernel,
+                                  specificato nel campo
+                                  \var{constant} di \struct{timex}.\\ 
+    \constd{ADJ\_TICK}          & Imposta il valore dei \textit{tick}
+                                  del timer in
+                                  microsecondi, espresso nel campo
+                                  \var{tick} di \struct{timex}.\\  
+    \constd{ADJ\_OFFSET\_SINGLESHOT}&Chiede uno spostamento una tantum 
+                                      dell'orologio secondo il valore del
+                                      campo \var{offset} simulando il
+                                      comportamento di \func{adjtime}.\\ 
     \hline
   \end{tabular}
   \caption{Costanti per l'assegnazione del valore del campo \var{mode} della
     \hline
   \end{tabular}
   \caption{Costanti per l'assegnazione del valore del campo \var{mode} della
@@ -2668,7 +2674,7 @@ dell'orologio per effettuare gli aggiustamenti del calendario per tenere conto
 del disallineamento con il tempo solare.\footnote{per dettagli si consulti
   \url{http://it.wikipedia.org/wiki/Leap_second}.}
 
 del disallineamento con il tempo solare.\footnote{per dettagli si consulti
   \url{http://it.wikipedia.org/wiki/Leap_second}.}
 
-I campi \var{tm\_min} e\var{tm\_hour} che indicano rispettivamente minuti ed
+I campi \var{tm\_min} e \var{tm\_hour} che indicano rispettivamente minuti ed
 ore hanno valori compresi rispettivamente fra 0 e 59 e fra 0 e 23. Il campo
 \var{tm\_mday} che indica il giorno del mese prevede invece un valore compreso
 fra 1 e 31, ma la \acr{glibc} supporta pure il valore 0 come indicazione
 ore hanno valori compresi rispettivamente fra 0 e 59 e fra 0 e 23. Il campo
 \var{tm\_mday} che indica il giorno del mese prevede invece un valore compreso
 fra 1 e 31, ma la \acr{glibc} supporta pure il valore 0 come indicazione
@@ -2716,7 +2722,7 @@ Nel caso di \func{ctime} la funzione tiene conto della eventuale impostazione
 di una \textit{timezone} e effettua una chiamata preventiva a \func{tzset}
 (che vedremo a breve), in modo che la data espressa tenga conto del fuso
 orario. In realtà \func{ctime} è banalmente definita in termini di
 di una \textit{timezone} e effettua una chiamata preventiva a \func{tzset}
 (che vedremo a breve), in modo che la data espressa tenga conto del fuso
 orario. In realtà \func{ctime} è banalmente definita in termini di
-\func{asctime} come \code{asctime(localtime(t)}.
+\func{asctime} come \code{asctime(localtime(t))}.
 
 Dato che l'uso di una stringa statica rende le funzioni non rientranti
 POSIX.1c e SUSv2 prevedono due sostitute rientranti, il cui nome è al solito
 
 Dato che l'uso di una stringa statica rende le funzioni non rientranti
 POSIX.1c e SUSv2 prevedono due sostitute rientranti, il cui nome è al solito
@@ -2762,40 +2768,30 @@ preallocare la struttura su cui sarà restituita la conversione. La versione
 rientrante di \func{localtime} però non effettua la chiamata preventiva a
 \func{tzset} che deve essere eseguita a cura dell'utente.
 
 rientrante di \func{localtime} però non effettua la chiamata preventiva a
 \func{tzset} che deve essere eseguita a cura dell'utente.
 
-Infine \func{mktime} esegue la conversione di un \textit{broken-down time} a
-partire da una struttura \struct{tm} restituendo direttamente un valore di
-tipo \type{time\_t} con il \textit{calendar time}. La funzione ignora i campi
-\var{tm\_wday} e \var{tm\_yday} e per gli altri campi normalizza eventuali
-valori fuori degli intervalli specificati in precedenza: se cioè si indica un
-12 per \var{tm\_mon} si prenderà il gennaio dell'anno successivo. Inoltre la
-funzione tiene conto del valore di \var{tm\_isdst} per effettuare le
-correzioni relative al fuso orario: un valore positivo indica che deve essere
-tenuta in conto l'ora legale, un valore nullo che non deve essere applicata
-nessuna correzione, un valore negativo che si deve far ricorso alle
+La funzione \func{mktime} esegue invece la conversione di un
+\textit{broken-down time} a partire da una struttura \struct{tm} restituendo
+direttamente un valore di tipo \type{time\_t} con il \textit{calendar
+  time}. La funzione ignora i campi \var{tm\_wday} e \var{tm\_yday} e per gli
+altri campi normalizza eventuali valori fuori degli intervalli specificati in
+precedenza: se cioè si indica un 12 per \var{tm\_mon} si prenderà il gennaio
+dell'anno successivo.
+
+Inoltre la funzione tiene conto del valore di \var{tm\_isdst} per effettuare
+le correzioni relative al fuso orario: un valore positivo indica che deve
+essere tenuta in conto l'ora legale, un valore nullo che non deve essere
+applicata nessuna correzione, un valore negativo che si deve far ricorso alle
 informazioni relative al proprio fuso orario per determinare lo stato dell'ora
 informazioni relative al proprio fuso orario per determinare lo stato dell'ora
-legale.  
+legale.
 
 
-La funzione inoltre modifica i valori della struttura \struct{tm} in forma di
+La funzione infine modifica i valori della struttura \struct{tm} in forma di
 \textit{value result argument}, normalizzando i valori dei vari campi,
 impostando i valori risultanti per \var{tm\_wday} e \var{tm\_yday} e
 assegnando a \var{tm\_isdst} il valore (positivo o nullo) corrispondente allo
 \textit{value result argument}, normalizzando i valori dei vari campi,
 impostando i valori risultanti per \var{tm\_wday} e \var{tm\_yday} e
 assegnando a \var{tm\_isdst} il valore (positivo o nullo) corrispondente allo
-stato dell'ora legale. La funzione inoltre provvede ad impostare il valore
-della variabile globale \var{tzname}.
+stato dell'ora legale. La funzione provvede anche ad impostare il valore della
+variabile globale \var{tzname}.
 
 \itindend{calendar~time}
 
 
 \itindend{calendar~time}
 
-\begin{figure}[!htb]
-  \footnotesize
-  \centering
-  \begin{minipage}[c]{.75\textwidth}
-    \includestruct{listati/time_zone_var.c}
-  \end{minipage} 
-  \normalsize 
-  \caption{Le variabili globali usate per la gestione delle
-    \textit{timezone}.}
-  \label{fig:sys_tzname}
-\end{figure}
-
 Come accennato l'uso del \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 dalle funzioni di conversione grazie alle
 Come accennato l'uso del \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 dalle funzioni di conversione grazie alle
@@ -2825,6 +2821,18 @@ per l'ora legale. Anche se in fig.~\ref{fig:sys_tzname} sono indicate come
 \var{timezone} indica la differenza di fuso orario in secondi, mentre
 \var{daylight} indica se è attiva o meno l'ora legale.
 
 \var{timezone} indica la differenza di fuso orario in secondi, mentre
 \var{daylight} indica se è attiva o meno l'ora legale.
 
+\begin{figure}[!htb]
+  \footnotesize
+  \centering
+  \begin{minipage}[c]{.75\textwidth}
+    \includestruct{listati/time_zone_var.c}
+  \end{minipage} 
+  \normalsize 
+  \caption{Le variabili globali usate per la gestione delle
+    \textit{timezone}.}
+  \label{fig:sys_tzname}
+\end{figure}
+
 Benché la funzione \func{asctime} fornisca la modalità più immediata per
 stampare un tempo o una data, la flessibilità non fa parte delle sue
 caratteristiche; quando si vuole poter stampare solo una parte (l'ora, o il
 Benché la funzione \func{asctime} fornisca la modalità più immediata per
 stampare un tempo o una data, la flessibilità non fa parte delle sue
 caratteristiche; quando si vuole poter stampare solo una parte (l'ora, o il
@@ -2895,8 +2903,8 @@ Il risultato della funzione è controllato dalla stringa di formato
 \param{format}, tutti i caratteri restano invariati eccetto \texttt{\%} che
 viene utilizzato come modificatore. Alcuni dei possibili valori che esso può
 assumere sono riportati in tab.~\ref{tab:sys_strftime_format}.\footnote{per la
 \param{format}, tutti i caratteri restano invariati eccetto \texttt{\%} che
 viene utilizzato come modificatore. Alcuni dei possibili valori che esso può
 assumere sono riportati in tab.~\ref{tab:sys_strftime_format}.\footnote{per la
-  precisione si sono riportati definiti dallo standard ANSI C, che sono anche
-  quelli ripresi in POSIX.1; la \acr{glibc} fornisce anche le estensioni
+  precisione si sono riportati quelli definiti dallo standard ANSI C che sono
+  anche quelli ripresi in POSIX.1; la \acr{glibc} fornisce anche le estensioni
   introdotte da POSIX.2 per il comando \cmd{date}, i valori introdotti da
   SVID3 e ulteriori estensioni GNU; l'elenco completo dei possibili valori è
   riportato nella pagina di manuale della funzione.} La funzione tiene conto
   introdotte da POSIX.2 per il comando \cmd{date}, i valori introdotti da
   SVID3 e ulteriori estensioni GNU; l'elenco completo dei possibili valori è
   riportato nella pagina di manuale della funzione.} La funzione tiene conto
@@ -2932,7 +2940,7 @@ questo riguardo si rimanda alla lettura della pagina di manuale.
 
 Si tenga presente comunque che anche in caso di scansione completamente
 riuscita la funzione sovrascrive soltanto i campi di \param{tm} indicati dal
 
 Si tenga presente comunque che anche in caso di scansione completamente
 riuscita la funzione sovrascrive soltanto i campi di \param{tm} indicati dal
-formato, la struttura originaria infatti non viene inizializzati e gli altri
+formato, la struttura originaria infatti non viene inizializzata e gli altri
 campi restano ai valori che avevano in precedenza.
 
 
 campi restano ai valori che avevano in precedenza.
 
 
@@ -2974,9 +2982,9 @@ questo è infatti il metodo usato da Linux per renderla locale ai singoli
 \textit{thread}.
 
 La variabile è in genere definita come \dirct{volatile} dato che può essere
 \textit{thread}.
 
 La variabile è in genere definita come \dirct{volatile} dato che può essere
-cambiata in modo asincrono da un segnale, per un esempio si veda
+cambiata in modo asincrono da un segnale; per un esempio si veda
 sez.~\ref{sec:sig_sigchld} ricordando quanto trattato in
 sez.~\ref{sec:sig_sigchld} ricordando quanto trattato in
-sez.~\ref{sec:proc_race_cond}). Dato che un gestore di segnale scritto bene si
+sez.~\ref{sec:proc_race_cond}. Dato che un gestore di segnale scritto bene si
 cura di salvare e ripristinare il valore della variabile all'uscita, nella
 programmazione normale, quando si può fare l'assunzione che i gestori di
 segnali siano ben scritti, di questo non è necessario preoccuparsi.
 cura di salvare e ripristinare il valore della variabile all'uscita, nella
 programmazione normale, quando si può fare l'assunzione che i gestori di
 segnali siano ben scritti, di questo non è necessario preoccuparsi.
@@ -3104,7 +3112,9 @@ variabili globali:
 dichiarate in \headfile{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 una di queste stringhe è
 dichiarate in \headfile{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 una di queste stringhe è
-sostanzialmente equivalente a quello di \func{strerror}.
+sostanzialmente equivalente a quello di \func{strerror}, ma dato che non è
+detto che \var{sys\_errlist} sia stato aggiornato in caso di aggiunta di nuovi
+errori, il suo uso è deprecato e si deve sempre usare \func{perror}.
 
 \begin{figure}[!htbp]
   \footnotesize \centering
 
 \begin{figure}[!htbp]
   \footnotesize \centering
@@ -3270,7 +3280,7 @@ che errori relativi alla stessa linea non vengano ripetuti.
 % LocalWords:  memory mlockall MAP LOCKED shmctl MSGQUEUE attr NICE nice MADV
 % LocalWords:  madvise WILLNEED RTPRIO sched setscheduler setparam scheduling
 % LocalWords:  RTTIME execve kb prlimit pid new old ESRCH EUSERS refresh high
 % LocalWords:  memory mlockall MAP LOCKED shmctl MSGQUEUE attr NICE nice MADV
 % LocalWords:  madvise WILLNEED RTPRIO sched setscheduler setparam scheduling
 % LocalWords:  RTTIME execve kb prlimit pid new old ESRCH EUSERS refresh high
-% LocalWords:  resolution HRT jiffies strptime
+% LocalWords:  resolution HRT jiffies strptime pre l'I value argument
 
 %%% Local Variables: 
 %%% mode: latex
 
 %%% Local Variables: 
 %%% mode: latex