Varie correzioni, completata revisione capitolo sull'I/O su file
[gapil.git] / session.tex
index dd98e69ffd74cc868a830fa03e263e08ab7c1615..639cf0dd90d7892a921f4737fcd7f647ef20d3d3 100644 (file)
@@ -1,6 +1,6 @@
 %% session.tex
 %%
-%% Copyright (C) 2000-2015 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2019 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -98,21 +98,21 @@ dei compiti specifici.
 Per questo l'esecuzione di una riga di comando può originare più di un
 processo, quindi nella gestione del \textit{job control} non si può far
 riferimento ai singoli processi.  Per questo il kernel prevede la possibilità
-di raggruppare più processi in un cosiddetto \itindex{process~group}
-\textit{process group} (detto anche \textsl{raggruppamento di processi}, vedi
+di raggruppare più processi in un cosiddetto \textit{process group} (detto
+anche \textsl{raggruppamento di processi}, vedi
 sez.~\ref{sec:sess_proc_group}). Deve essere cura della shell far sì che tutti
 i processi che originano da una stessa riga di comando appartengano allo
 stesso raggruppamento di processi, in modo che le varie funzioni di controllo,
 ed i segnali inviati dal terminale, possano fare riferimento ad esso.
 
 In generale all'interno di una sessione avremo un eventuale (può non esserci)
-\itindex{process~group} \textit{process group} in \textit{foreground}, che
-riunisce i processi che possono accedere al terminale, e più
-\itindex{process~group} \textit{process group} in \textit{background}, che non
-possono accedervi. Il \textit{job control} prevede che quando un processo
-appartenente ad un raggruppamento in \textit{background} cerca di accedere al
-terminale, venga inviato un segnale a tutti i processi del raggruppamento, in
-modo da bloccarli (vedi sez.~\ref{sec:sess_ctrl_term}).
+\textit{process group} in \textit{foreground}, che riunisce i processi che
+possono accedere al terminale, e più \textit{process group} in
+\textit{background}, che non possono accedervi. Il \textit{job control}
+prevede che quando un processo appartenente ad un raggruppamento in
+\textit{background} cerca di accedere al terminale, venga inviato un segnale a
+tutti i processi del raggruppamento, in modo da bloccarli (vedi
+sez.~\ref{sec:sess_ctrl_term}).
 
 Un comportamento analogo si ha anche per i segnali generati dai comandi di
 tastiera inviati dal terminale, che vengono inviati a tutti i processi del
@@ -237,14 +237,13 @@ prototipo è:
 \end{funcproto}
 
 La funzione assegna al \ids{PGID} il valore del \ids{PID} del processo
-corrente, rendendolo in tal modo \itindex{process~group~leader} \textit{group
-  leader} di un nuovo raggruppamento. Tutti i successivi processi da esso
-creati apparterranno (a meno di non cambiare di nuovo il \ids{PGID}) al nuovo
-raggruppamento. 
+corrente, rendendolo in tal modo \textit{group leader} di un nuovo
+raggruppamento. Tutti i successivi processi da esso creati apparterranno (a
+meno di non cambiare di nuovo il \ids{PGID}) al nuovo raggruppamento.
 
 La versione illustrata è quella usata nella definizione di POSIX.1, in BSD
 viene usata una funzione con questo nome, che però è identica a
-\func{setpgid}, che vedremo a breve, negli argomenti e negli effetti. Nelle
+\func{setpgid}, che vedremo a breve, negli argomenti e negli effetti. Nella
 \acr{glibc} viene sempre usata sempre questa definizione, a meno di non
 richiedere esplicitamente la compatibilità all'indietro con BSD, definendo la
 macro \macro{\_BSD\_SOURCE} ed evitando di definire le macro che richiedono
@@ -295,8 +294,8 @@ sia dal processo padre, per impostare il valore nel figlio, che da
 quest'ultimo, per sé stesso, in modo che il cambiamento di \textit{process
   group} sia immediato per entrambi; una delle due chiamate sarà ridondante,
 ma non potendo determinare quale dei due processi viene eseguito per primo,
-occorre eseguirle comunque entrambe per evitare di esporsi ad una
-\itindex{race~condition} \textit{race condition}.
+occorre eseguirle comunque entrambe per evitare di esporsi ad una \textit{race
+  condition}.
 
 Si noti come nessuna delle funzioni esaminate finora permetta di spostare un
 processo da una sessione ad un altra; infatti l'unico modo di far cambiare
@@ -328,12 +327,11 @@ uguale al suo \ids{PID}) ed unico componente.\footnote{in Linux la proprietà è
 terminale di controllo (torneremo sull'argomento in
 sez.~\ref{sec:sess_ctrl_term}) cui fosse in precedenza associato.
 
-La funzione ha successo soltanto se il processo non è già
-\itindex{process~group~leader} leader di un \textit{process group}, per cui
-per usarla di norma si esegue una \func{fork} e si esce, per poi chiamare
-\func{setsid} nel processo figlio, in modo che, avendo questo lo stesso
-\ids{PGID} del padre ma un \ids{PID} diverso, non ci siano possibilità di
-errore. 
+La funzione ha successo soltanto se il processo non è già leader di un
+\textit{process group}, per cui per usarla di norma si esegue una \func{fork}
+e si esce, per poi chiamare \func{setsid} nel processo figlio, in modo che,
+avendo questo lo stesso \ids{PGID} del padre ma un \ids{PID} diverso, non ci
+siano possibilità di errore.
 
 Potrebbe sorgere il dubbio che, per il riutilizzo dei valori dei \ids{PID}
 fatto nella creazione dei nuovi processi (vedi sez.~\ref{sec:proc_pid}), il
@@ -384,7 +382,7 @@ automaticamente a meno di non avere richiesto esplicitamente il contrario
 aprendo il terminale di controllo con il flag \const{O\_NOCTTY} (vedi
 sez.~\ref{sec:file_open_close}). In questo Linux segue la semantica di SVr4;
 BSD invece richiede che il terminale venga allocato esplicitamente con una
-\func{ioctl} con il comando \const{TIOCSCTTY}.
+\func{ioctl} con il comando \constd{TIOCSCTTY}.
 
 In genere, a meno di redirezioni, nelle sessioni di lavoro il terminale di
 controllo è associato ai file standard (input, output ed error) dei processi
@@ -423,16 +421,15 @@ Come accennato in sez.~\ref{sec:sess_job_control_overview}, tutti i processi
 (e relativi raggruppamenti) che non fanno parte del gruppo di
 \textit{foreground} sono detti in \textit{background}; se uno si essi cerca di
 accedere al terminale di controllo provocherà l'invio da parte del kernel di
-uno dei due segnali \signal{SIGTTIN} o \signal{SIGTTOU} (a seconda che l'accesso
-sia stato in lettura o scrittura) a tutto il suo \itindex{process~group}
-\textit{process group}; dato che il comportamento di default di questi segnali
-(si riveda quanto esposto in sez.~\ref{sec:sig_job_control}) è di fermare il
-processo, di norma questo comporta che tutti i membri del gruppo verranno
-fermati, ma non si avranno condizioni di errore.\footnote{la shell in genere
-  notifica comunque un avvertimento, avvertendo la presenza di processi
-  bloccati grazie all'uso di \func{waitpid}.} Se però si bloccano o ignorano i
-due segnali citati, le funzioni di lettura e scrittura falliranno con un
-errore di \errcode{EIO}.
+uno dei due segnali \signal{SIGTTIN} o \signal{SIGTTOU} (a seconda che
+l'accesso sia stato in lettura o scrittura) a tutto il suo \textit{process
+  group}; dato che il comportamento di default di questi segnali (si riveda
+quanto esposto in sez.~\ref{sec:sig_job_control}) è di fermare il processo, di
+norma questo comporta che tutti i membri del gruppo verranno fermati, ma non
+si avranno condizioni di errore.\footnote{la shell in genere notifica comunque
+  un avvertimento, avvertendo la presenza di processi bloccati grazie all'uso
+  di \func{waitpid}.} Se però si bloccano o ignorano i due segnali citati, le
+funzioni di lettura e scrittura falliranno con un errore di \errcode{EIO}.
 
 In genere la funzione viene chiamata da un processo che è gruppo di
 \textit{foreground} per passare l'accesso al terminale ad altri processi,
@@ -465,15 +462,15 @@ La funzione legge il \textit{process group} di \textit{foreground} associato
 al file descriptor \param{fd}, che deve essere un terminale, restituendolo
 come risultato. Sia questa funzione che la precedente sono state introdotte
 con lo standard POSIX.1-2001, ma su Linux sono realizzate utilizzando le
-operazioni di \func{ioctl} con i comandi \const{TIOCGPGRP} e
-\const{TIOCSPGRP}.
+operazioni di \func{ioctl} con i comandi \constd{TIOCGPGRP} e
+\constd{TIOCSPGRP}.
 
 Si noti come entrambe le funzioni usino come argomento il valore di un file
 descriptor, il risultato comunque non dipende dal file descriptor che si usa
 ma solo dal terminale cui fa riferimento. Il kernel inoltre permette a ciascun
 processo di accedere direttamente al suo terminale di controllo attraverso il
 file speciale \file{/dev/tty}, che per ogni processo è un sinonimo per il
-proprio terminale di controllo.  Questo consente anche a processi che possono
+proprio terminale di controllo. Questo consente anche a processi che possono
 aver rediretto l'output di accedere al terminale di controllo, pur non
 disponendo più del file descriptor originario; un caso tipico è il programma
 \cmd{crypt} che accetta la redirezione sullo \textit{standard input} di un
@@ -522,27 +519,26 @@ controllo dello stesso.
 
 Questa è la situazione in cui si ha quello che viene chiamato un
 \itindex{process~group~orphaned} \textit{orphaned process group}. Lo standard
-POSIX.1 lo definisce come un \itindex{process~group} \textit{process group} i
-cui processi hanno come padri esclusivamente o altri processi nel
-raggruppamento, o processi fuori della sessione.  Lo standard prevede inoltre
-che se la terminazione di un processo fa sì che un raggruppamento di processi
-diventi orfano e se i suoi membri sono bloccati, ad essi vengano inviati in
-sequenza i segnali di \signal{SIGHUP} e \signal{SIGCONT}.
+POSIX.1 lo definisce come un \textit{process group} i cui processi hanno come
+padri esclusivamente o altri processi nel raggruppamento, o processi fuori
+della sessione.  Lo standard prevede inoltre che se la terminazione di un
+processo fa sì che un raggruppamento di processi diventi orfano e se i suoi
+membri sono bloccati, ad essi vengano inviati in sequenza i segnali di
+\signal{SIGHUP} e \signal{SIGCONT}.
 
 La definizione può sembrare complicata, e a prima vista non è chiaro cosa
 tutto ciò abbia a che fare con il problema della terminazione del processo di
 controllo.  Consideriamo allora cosa avviene di norma nel \textit{job
   control}: una sessione viene creata con \func{setsid} che crea anche un
-nuovo \itindex{process~group} \textit{process group}. Per definizione
-quest'ultimo è sempre \itindex{process~group~orphaned} \textsl{orfano}, dato
-che il padre del leader di sessione è fuori dalla stessa e il nuovo
-\textit{process group} \itindex{process~group} contiene solo il leader di
-sessione. Questo è un caso limite, e non viene emesso nessun segnale perché
-quanto previsto dallo standard riguarda solo i raggruppamenti che diventano
-orfani in seguito alla terminazione di un processo.\footnote{l'emissione dei
-  segnali infatti avviene solo nella fase di uscita del processo, come una
-  delle operazioni legate all'esecuzione di \func{\_exit}, secondo quanto
-  illustrato in sez.~\ref{sec:proc_termination}.}
+nuovo \textit{process group}. Per definizione quest'ultimo è sempre
+\textsl{orfano}, dato che il padre del leader di sessione è fuori dalla stessa
+e il nuovo \textit{process group} contiene solo il leader di sessione. Questo
+è un caso limite, e non viene emesso nessun segnale perché quanto previsto
+dallo standard riguarda solo i raggruppamenti che diventano orfani in seguito
+alla terminazione di un processo.\footnote{l'emissione dei segnali infatti
+  avviene solo nella fase di uscita del processo, come una delle operazioni
+  legate all'esecuzione di \func{\_exit}, secondo quanto illustrato in
+  sez.~\ref{sec:proc_termination}.}
 
 Il leader di sessione provvederà a creare nuovi raggruppamenti che a questo
 punto non sono orfani in quanto esso resta padre per almeno uno dei processi
@@ -587,7 +583,7 @@ di avvio di System V;\footnote{in realtà negli ultimi tempi questa situazione
   \texttt{systemd}, ma per quanto trattato in questa sezione il risultato
   finale non cambia, si avrà comunque il lancio di un programma che consenta
   l'accesso al terminale.}  questa prevede che \cmd{init} legga dal file di
-configurazione \conffile{/etc/inittab} quali programmi devono essere lanciati,
+configurazione \conffiled{/etc/inittab} quali programmi devono essere lanciati,
 ed in quali modalità, a seconda del cosiddetto \textit{run level}, anch'esso
 definito nello stesso file.
 
@@ -622,18 +618,17 @@ dall'amministratore nel file di configurazione del programma,
 
 Quando viene lanciato da \cmd{init} il programma parte con i privilegi di
 amministratore e con un ambiente vuoto; \cmd{getty} si cura di chiamare
-\func{setsid} per creare una nuova sessione ed un nuovo
-\itindex{process~group} \textit{process group}, e di aprire il terminale (che
-così diventa il terminale di controllo della sessione) in lettura sullo
-\textit{standard input} ed in scrittura sullo \textit{standard output} e sullo
-\textit{standard error}; inoltre effettuerà, qualora servano, ulteriori
-impostazioni.\footnote{ad esempio, come qualcuno si sarà accorto scrivendo un
-  nome di login in maiuscolo, può effettuare la conversione automatica
-  dell'input in minuscolo, ponendosi in una modalità speciale che non
-  distingue fra i due tipi di caratteri (a beneficio di alcuni vecchi
-  terminali che non supportavano le minuscole).}  Alla fine il programma
-stamperà un messaggio di benvenuto per poi porsi in attesa dell'immissione del
-nome di un utente.
+\func{setsid} per creare una nuova sessione ed un nuovo \textit{process
+  group}, e di aprire il terminale (che così diventa il terminale di controllo
+della sessione) in lettura sullo \textit{standard input} ed in scrittura sullo
+\textit{standard output} e sullo \textit{standard error}; inoltre effettuerà,
+qualora servano, ulteriori impostazioni.\footnote{ad esempio, come qualcuno si
+  sarà accorto scrivendo un nome di login in maiuscolo, può effettuare la
+  conversione automatica dell'input in minuscolo, ponendosi in una modalità
+  speciale che non distingue fra i due tipi di caratteri (a beneficio di
+  alcuni vecchi terminali che non supportavano le minuscole).}  Alla fine il
+programma stamperà un messaggio di benvenuto per poi porsi in attesa
+dell'immissione del nome di un utente.
 
 Una volta che si sia immesso il nome di login \cmd{getty} esegue direttamente
 il programma \cmd{login} con una \func{execle}, passando come argomento la
@@ -725,10 +720,10 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni:
 \begin{enumerate*}
 \item Eseguire una \func{fork} e terminare immediatamente il processo padre
   proseguendo l'esecuzione nel figlio.  In questo modo si ha la certezza che
-  il figlio non è un \itindex{process~group~leader} \textit{process group
-    leader}, (avrà il \ids{PGID} del padre, ma un \ids{PID} diverso) e si può
-  chiamare \func{setsid} con successo. Inoltre la shell considererà terminato
-  il comando all'uscita del padre.
+  il figlio non è un \textit{process group leader}, (avrà il \ids{PGID} del
+  padre, ma un \ids{PID} diverso) e si può chiamare \func{setsid} con
+  successo. Inoltre la shell considererà terminato il comando all'uscita del
+  padre.
 \item Eseguire \func{setsid} per creare una nuova sessione ed un nuovo
   raggruppamento di cui il processo diventa automaticamente il leader, che
   però non ha associato nessun terminale di controllo.
@@ -743,9 +738,9 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni:
   il programma), per evitare che la directory da cui si è lanciato il processo
   resti in uso e non sia possibile rimuoverla o smontare il filesystem che la
   contiene.
-\item Impostare la \itindex{umask} maschera dei permessi (di solito con
-  \code{umask(0)}) in modo da non essere dipendenti dal valore ereditato da
-  chi ha lanciato originariamente il processo.
+\item Impostare la maschera dei permessi (di solito con \code{umask(0)}) in
+  modo da non essere dipendenti dal valore ereditato da chi ha lanciato
+  originariamente il processo.
 \item Chiudere tutti i file aperti che non servono più (in generale tutti); in
   particolare vanno chiusi i file standard che di norma sono ancora associati
   al terminale (un'altra opzione è quella di redirigerli verso
@@ -754,7 +749,7 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni:
 
 
 In Linux buona parte di queste azioni possono venire eseguite invocando la
-funzione \funcd{daemon} (fornita dalle \acr{glibc}), introdotta per la prima
+funzione \funcd{daemon} (fornita dalla \acr{glibc}), introdotta per la prima
 volta in BSD4.4; il suo prototipo è:
 
 \begin{funcproto}{
@@ -830,7 +825,7 @@ demone che si usa, per la gestione del quale si rimanda ad un testo di
 amministrazione di sistema.\footnote{l'argomento è ad esempio coperto dal
   capitolo 3.2.3 si \cite{AGL}.}
 
-Le \acr{glibc} definiscono una serie di funzioni standard con cui un processo
+La \acr{glibc} definisce una serie di funzioni standard con cui un processo
 può accedere in maniera generica al servizio di \textit{syslog}, che però
 funzionano solo localmente; se si vogliono inviare i messaggi ad un altro
 sistema occorre farlo esplicitamente con un socket UDP, o utilizzare le
@@ -874,25 +869,25 @@ specificato con un OR aritmetico.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{LOG\_AUTH}     & Messaggi relativi ad autenticazione e sicurezza,
-                            obsoleto, è sostituito da \const{LOG\_AUTHPRIV}.\\
-    \const{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\
-    \const{LOG\_CRON}     & Messaggi dei demoni di gestione dei comandi
-                            programmati (\cmd{cron} e \cmd{at}).\\
-    \const{LOG\_DAEMON}   & Demoni di sistema.\\
-    \const{LOG\_FTP}      & Servizio FTP.\\
-    \const{LOG\_KERN}     & Messaggi del kernel.\\
-    \const{LOG\_LOCAL0}   & Riservato all'amministratore per uso locale.\\
+    \constd{LOG\_AUTH}     & Messaggi relativi ad autenticazione e sicurezza,
+                             obsoleto, è sostituito da \const{LOG\_AUTHPRIV}.\\
+    \constd{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\
+    \constd{LOG\_CRON}     & Messaggi dei demoni di gestione dei comandi
+                             programmati (\cmd{cron} e \cmd{at}).\\
+    \constd{LOG\_DAEMON}   & Demoni di sistema.\\
+    \constd{LOG\_FTP}      & Servizio FTP.\\
+    \constd{LOG\_KERN}     & Messaggi del kernel.\\
+    \constd{LOG\_LOCAL0}   & Riservato all'amministratore per uso locale.\\
     \hspace{.5cm}$\vdots$ &   \hspace{3cm}$\vdots$\\
-    \const{LOG\_LOCAL7}   & Riservato all'amministratore per uso locale.\\
-    \const{LOG\_LPR}      & Messaggi del sistema di gestione delle stampanti.\\
-    \const{LOG\_MAIL}     & Messaggi del sistema di posta elettronica.\\
-    \const{LOG\_NEWS}     & Messaggi del sistema di gestione delle news 
+    \constd{LOG\_LOCAL7}   & Riservato all'amministratore per uso locale.\\
+    \constd{LOG\_LPR}      & Messaggi del sistema di gestione delle stampanti.\\
+    \constd{LOG\_MAIL}     & Messaggi del sistema di posta elettronica.\\
+    \constd{LOG\_NEWS}     & Messaggi del sistema di gestione delle news 
                             (USENET).\\
-    \const{LOG\_SYSLOG}   & Messaggi generati dal demone di gestione del
+    \constd{LOG\_SYSLOG}   & Messaggi generati dal demone di gestione del
                             \textit{syslog}.\\
-    \const{LOG\_USER}     & Messaggi generici a livello utente.\\
-    \const{LOG\_UUCP}     & Messaggi del sistema UUCP (\textit{Unix to Unix
+    \constd{LOG\_USER}     & Messaggi generici a livello utente.\\
+    \constd{LOG\_UUCP}     & Messaggi del sistema UUCP (\textit{Unix to Unix
                              CoPy}), ormai in disuso.\\
 \hline
 \end{tabular}
@@ -914,18 +909,19 @@ tab.~\ref{tab:sess_openlog_option}.
 \textbf{Valore}& \textbf{Significato}\\
 \hline
 \hline
-\const{LOG\_CONS}   & Scrive sulla console in caso di errore nell'invio del
-                      messaggio al sistema del \textit{syslog}. \\
-\const{LOG\_NDELAY} & Apre la connessione al sistema del \textit{syslog}
-                      subito invece di attendere l'invio del primo messaggio.\\
-\const{LOG\_NOWAIT} & Non usato su Linux, su altre piattaforme non attende i
-                      processi figli creati per inviare il messaggio.\\
-\const{LOG\_ODELAY} & Attende il primo messaggio per aprire la connessione al
-                      sistema del \textit{syslog}.\\ 
-\const{LOG\_PERROR} & Stampa anche su \file{stderr} (non previsto in
-                      POSIX.1-2001).\\ 
-\const{LOG\_PID}    & Inserisce nei messaggi il \ids{PID} del processo
-                      chiamante.\\
+  \constd{LOG\_CONS}   & Scrive sulla console in caso di errore nell'invio del
+                         messaggio al sistema del \textit{syslog}. \\
+  \constd{LOG\_NDELAY} & Apre la connessione al sistema del \textit{syslog}
+                         subito invece di attendere l'invio del primo
+                         messaggio.\\ 
+  \constd{LOG\_NOWAIT} & Non usato su Linux, su altre piattaforme non attende i
+                         processi figli creati per inviare il messaggio.\\
+  \constd{LOG\_ODELAY} & Attende il primo messaggio per aprire la connessione al
+                         sistema del \textit{syslog}.\\ 
+  \constd{LOG\_PERROR} & Stampa anche su \file{stderr} (non previsto in
+                         POSIX.1-2001).\\ 
+  \constd{LOG\_PID}    & Inserisce nei messaggi il \ids{PID} del processo
+                         chiamante.\\
 \hline
 \end{tabular}
 \caption{Valori possibili per l'argomento \param{option} di \func{openlog}.}
@@ -964,15 +960,15 @@ forniti secondo quanto richiesto da \param{format}.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{LOG\_EMERG}   & Il sistema è inutilizzabile.\\
-    \const{LOG\_ALERT}   & C'è una emergenza che richiede intervento
-                           immediato.\\
-    \const{LOG\_CRIT}    & Si è in una condizione critica.\\
-    \const{LOG\_ERR}     & Si è in una condizione di errore.\\
-    \const{LOG\_WARNING} & Messaggio di avvertimento.\\
-    \const{LOG\_NOTICE}  & Notizia significativa relativa al comportamento.\\
-    \const{LOG\_INFO}    & Messaggio informativo.\\
-    \const{LOG\_DEBUG}   & Messaggio di debug.\\
+    \constd{LOG\_EMERG}   & Il sistema è inutilizzabile.\\
+    \constd{LOG\_ALERT}   & C'è una emergenza che richiede intervento
+                            immediato.\\
+    \constd{LOG\_CRIT}    & Si è in una condizione critica.\\
+    \constd{LOG\_ERR}     & Si è in una condizione di errore.\\
+    \constd{LOG\_WARNING} & Messaggio di avvertimento.\\
+    \constd{LOG\_NOTICE}  & Notizia significativa relativa al comportamento.\\
+    \constd{LOG\_INFO}    & Messaggio informativo.\\
+    \constd{LOG\_DEBUG}   & Messaggio di debug.\\
     \hline
   \end{tabular}
   \caption{Valori possibili per l'indice di importanza del messaggio da
@@ -987,7 +983,7 @@ preimpostata con \func{openlog}. La priorità è indicata con un valore numerico
 specificabile attraverso le costanti riportate in
 tab.~\ref{tab:sess_syslog_priority}.  
 
-Le \acr{glibc}, seguendo POSIX.1-2001, prevedono otto diverse priorità
+La \acr{glibc}, seguendo POSIX.1-2001, prevede otto diverse priorità
 ordinate da 0 a 7, in ordine di importanza decrescente; questo comporta che i
 tre bit meno significativi dell'argomento \param{priority} sono occupati da
 questo valore, mentre i restanti bit più significativi vengono usati per
@@ -1011,8 +1007,8 @@ funzione è originaria di BSD e per utilizzarla deve essere definito
 La sola differenza con \func{syslog} è quella di prendere invece di una lista
 di argomenti esplicita un unico argomento finale passato nella forma di una
 \macro{va\_list}; la funzione risulta utile qualora si ottengano gli argomenti
-dalla invocazione di un'altra funzione \index{funzioni!variadic}
-\textit{variadic} (si rammenti quanto visto in sez.~\ref{sec:proc_variadic}).
+dalla invocazione di un'altra funzione \textit{variadic} (si ricordi quanto
+visto in sez.~\ref{sec:proc_variadic}).
 
 Per semplificare la gestione della scelta del livello di priorità a partire
 dal quale si vogliono registrare i messaggi, le funzioni di gestione
@@ -1044,9 +1040,9 @@ valore non nullo per \param{mask} la registrazione dei messaggi viene
 disabilitata per tutte quelle priorità che non rientrano nella maschera.
 
 In genere il valore viene impostato usando la macro
-\macro{LOG\_MASK}\texttt{(p)} dove \code{p} è una delle costanti di
+\macrod{LOG\_MASK}\texttt{(p)} dove \code{p} è una delle costanti di
 tab.~\ref{tab:sess_syslog_priority}. É inoltre disponibile anche la macro
-\macro{LOG\_UPTO}\texttt{(p)} che permette di specificare automaticamente
+\macrod{LOG\_UPTO}\texttt{(p)} che permette di specificare automaticamente
 tutte le priorità fino a quella indicata da \code{p}.
 
 Una volta che si sia certi che non si intende registrare più nessun messaggio
@@ -1112,7 +1108,7 @@ come \textit{console} di sistema,\footnote{quello che viene indicato con il
 di blocco totale del sistema (nell'assunzione che la console sia collegata).
 
 In particolare la stampa dei messaggi sulla console è controllata dal
-contenuto del file \sysctlfile{kernel/printk} (o con l'equivalente parametro
+contenuto del file \sysctlfiled{kernel/printk} (o con l'equivalente parametro
 di \func{sysctl}) che prevede quattro valori numerici interi: il primo,
 \textit{console\_loglevel}, indica la priorità corrente oltre la quale vengono
 stampati i messaggi sulla console, il secondo,
@@ -1128,9 +1124,9 @@ default.\footnote{anch'esso viene usato nelle operazioni di controllo per
 Per la lettura dei messaggi del kernel e la gestione del relativo buffer
 circolare esiste una apposita \textit{system call} chiamata anch'essa
  \texttt{syslog}, ma dato il conflitto di nomi questa viene rimappata su
- un'altra funzione di libreria, in particolare nelle \acr{glibc} essa viene
- invocata tramite la funzione \funcd{klogctl},\footnote{nelle \acr{libc4} e
-   nelle \acr{libc5} la funzione invece era \code{SYS\_klog}.} il cui prototipo
+ un'altra funzione di libreria, in particolare nella \acr{glibc} essa viene
+ invocata tramite la funzione \funcd{klogctl},\footnote{nella \acr{libc4} e
+   nella \acr{libc5} la funzione invece era \code{SYS\_klog}.} il cui prototipo
  è:
 
 \begin{funcproto}{
@@ -1478,9 +1474,8 @@ essere allocata in precedenza, e la relativa dimensione, \param{len}. Se la
 stringa che deve essere restituita, compreso lo zero di terminazione finale,
 eccede questa dimensione si avrà un errore.
 
-Una funzione funzione analoga alle precedenti prevista da POSIX.1, che
-restituisce il nome di un file di dispositivo, è \funcd{ctermid}, il cui
-prototipo è:
+Una funzione analoga alle precedenti prevista da POSIX.1, che restituisce il
+nome di un file di dispositivo, è \funcd{ctermid}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{stdio.h}
@@ -1489,8 +1484,8 @@ prototipo è:
 }
 
 {La funzione ritorna il puntatore alla stringa contenente il \textit{pathname}
-  del terminale o \val{NULL} se non non riesce ad eseguire l'operazione, non
-  sono previsti errori.}
+  del terminale o \val{NULL} se non riesce ad eseguire l'operazione, non sono
+  previsti errori.}
 \end{funcproto}
 
 La funzione restituisce un puntatore al \textit{pathname} del file di
@@ -1499,7 +1494,7 @@ come argomento \val{NULL} la funzione restituisce il puntatore ad una stringa
 statica che può essere sovrascritta da chiamate successive, e non è
 rientrante. Indicando invece un puntatore ad una zona di memoria già allocata
 la stringa sarà scritta su di essa, ma in questo caso il buffer preallocato
-deve avere una dimensione di almeno \const{L\_ctermid}
+deve avere una dimensione di almeno \constd{L\_ctermid}
 caratteri.\footnote{\const{L\_ctermid} è una delle varie costanti del sistema,
   non trattata esplicitamente in sez.~\ref{sec:sys_characteristics}, che
   indica la dimensione che deve avere una stringa per poter contenere il nome
@@ -1538,7 +1533,7 @@ ne aggiungono degli altri per mantenere ulteriori informazioni.\footnote{la
 
 I primi quattro campi sono quattro flag che controllano il comportamento del
 terminale; essi sono realizzati come maschera binaria, pertanto il tipo
-\type{tcflag\_t} è di norma realizzato con un intero senza segno di lunghezza
+\typed{tcflag\_t} è di norma realizzato con un intero senza segno di lunghezza
 opportuna. I valori devono essere specificati bit per bit, avendo cura di non
 modificare i bit su cui non si interviene.
 
@@ -1550,74 +1545,74 @@ modificare i bit su cui non si interviene.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una
-                     \textit{condizione di BREAK} è definita nel contesto di
-                     una trasmissione seriale asincrona come una sequenza di
-                     bit nulli più lunga di un byte.\\
-    \const{BRKINT} & Controlla la reazione ad un BREAK quando
-                     \const{IGNBRK} non è impostato. Se \const{BRKINT} è
-                     impostato il BREAK causa lo scarico delle code, 
-                     e se il terminale è il terminale di controllo per un 
-                     gruppo in foreground anche l'invio di \signal{SIGINT} ai
-                     processi di quest'ultimo. Se invece \const{BRKINT} non è
-                     impostato un BREAK viene letto come un carattere
-                     NUL, a meno che non sia impostato \const{PARMRK}
-                     nel qual caso viene letto come la sequenza di caratteri
-                     \texttt{0xFF 0x00 0x00}.\\
-    \const{IGNPAR} & Ignora gli errori di parità, il carattere viene passato
-                     come ricevuto. Ha senso solo se si è impostato 
-                     \const{INPCK}.\\
-    \const{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha 
-                     senso solo se \const{INPCK} è impostato e \const{IGNPAR}
-                     no. Se impostato inserisce una sequenza \texttt{0xFF
-                       0x00} prima di ogni carattere che presenta errori di
-                     parità, se non impostato un carattere con errori di
-                     parità viene letto come uno \texttt{0x00}. Se un
-                     carattere ha il valore \texttt{0xFF} e \const{ISTRIP} 
-                     non è impostato, per evitare ambiguità esso viene sempre
-                     riportato come \texttt{0xFF 0xFF}.\\
-    \const{INPCK}  & Abilita il controllo di parità in ingresso. Se non viene
-                     impostato non viene fatto nessun controllo ed i caratteri
-                     vengono passati in input direttamente.\\
-    \const{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette
-                     bit mettendo a zero il bit più significativo, altrimenti 
-                     vengono passati tutti gli otto bit.\\
-    \const{INLCR}  & Se impostato in ingresso il carattere di a capo
-                     (\verb|'\n'|) viene automaticamente trasformato in un
-                     ritorno carrello (\verb|'\r'|).\\
-    \const{IGNCR}  & Se impostato il carattere di ritorno carrello 
-                     (\textit{carriage return}, \verb|'\r'|) viene scartato 
-                     dall'input. Può essere utile per i terminali che inviano 
-                     entrambi i caratteri di ritorno carrello e a capo 
-                     (\textit{newline}, \verb|'\n'|).\\
-    \const{ICRNL}  & Se impostato un carattere di ritorno carrello  
-                     (\verb|'\r'|) sul terminale viene automaticamente 
-                     trasformato in un a capo (\verb|'\n'|) sulla coda di
-                     input.\\
-    \const{IUCLC}  & Se impostato trasforma i caratteri maiuscoli dal
-                     terminale in minuscoli sull'ingresso (opzione non 
-                     POSIX).\\
-    \const{IXON}   & Se impostato attiva il controllo di flusso in uscita con i
-                     caratteri di START e STOP. se si riceve
-                     uno STOP l'output viene bloccato, e viene fatto
-                     ripartire solo da uno START, e questi due
-                     caratteri non vengono passati alla coda di input. Se non
-                     impostato i due caratteri sono passati alla coda di input
-                     insieme agli altri.\\
-    \const{IXANY}  & Se impostato con il controllo di flusso permette a
-                     qualunque carattere di far ripartire l'output bloccato da
-                     un carattere di STOP.\\
-    \const{IXOFF}  & Se impostato abilita il controllo di flusso in
-                     ingresso. Il computer emette un carattere di STOP per
-                     bloccare l'input dal terminale e lo sblocca con il
-                     carattere START.\\
-    \const{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa
-                     di ingresso; in Linux non è implementato e il kernel si
-                     comporta cose se fosse sempre impostato (è una estensione
-                     BSD).\\
-    \const{IUTF8}  & Indica che l'input è in UTF-8, cosa che consente di
-                     utilizzare la cancellazione dei caratteri in maniera
-                     corretta (dal kernel 2.6.4 e non previsto in POSIX).\\
+    \constd{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una
+                      \textit{condizione di BREAK} è definita nel contesto di
+                      una trasmissione seriale asincrona come una sequenza di
+                      bit nulli più lunga di un byte.\\
+    \constd{BRKINT} & Controlla la reazione ad un BREAK quando
+                      \const{IGNBRK} non è impostato. Se \const{BRKINT} è
+                      impostato il BREAK causa lo scarico delle code, 
+                      e se il terminale è il terminale di controllo per un 
+                      gruppo in foreground anche l'invio di \signal{SIGINT} ai
+                      processi di quest'ultimo. Se invece \const{BRKINT} non è
+                      impostato un BREAK viene letto come un carattere
+                      NUL, a meno che non sia impostato \const{PARMRK}
+                      nel qual caso viene letto come la sequenza di caratteri
+                      \texttt{0xFF 0x00 0x00}.\\
+    \constd{IGNPAR} & Ignora gli errori di parità, il carattere viene passato
+                      come ricevuto. Ha senso solo se si è impostato 
+                      \const{INPCK}.\\
+    \constd{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha 
+                      senso solo se \const{INPCK} è impostato e \const{IGNPAR}
+                      no. Se impostato inserisce una sequenza \texttt{0xFF
+                      0x00} prima di ogni carattere che presenta errori di
+                      parità, se non impostato un carattere con errori di
+                      parità viene letto come uno \texttt{0x00}. Se un
+                      carattere ha il valore \texttt{0xFF} e \const{ISTRIP} 
+                      non è impostato, per evitare ambiguità esso viene sempre
+                      riportato come \texttt{0xFF 0xFF}.\\
+    \constd{INPCK}  & Abilita il controllo di parità in ingresso. Se non viene
+                      impostato non viene fatto nessun controllo ed i caratteri
+                      vengono passati in input direttamente.\\
+    \constd{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette
+                      bit mettendo a zero il bit più significativo, altrimenti 
+                      vengono passati tutti gli otto bit.\\
+    \constd{INLCR}  & Se impostato in ingresso il carattere di a capo
+                      (\verb|'\n'|) viene automaticamente trasformato in un
+                      ritorno carrello (\verb|'\r'|).\\
+    \constd{IGNCR}  & Se impostato il carattere di ritorno carrello 
+                      (\textit{carriage return}, \verb|'\r'|) viene scartato 
+                      dall'input. Può essere utile per i terminali che inviano 
+                      entrambi i caratteri di ritorno carrello e a capo 
+                      (\textit{newline}, \verb|'\n'|).\\
+    \constd{ICRNL}  & Se impostato un carattere di ritorno carrello  
+                      (\verb|'\r'|) sul terminale viene automaticamente 
+                      trasformato in un a capo (\verb|'\n'|) sulla coda di
+                      input.\\
+    \constd{IUCLC}  & Se impostato trasforma i caratteri maiuscoli dal
+                      terminale in minuscoli sull'ingresso (opzione non 
+                      POSIX).\\
+    \constd{IXON}   & Se impostato attiva il controllo di flusso in uscita con i
+                      caratteri di START e STOP. se si riceve
+                      uno STOP l'output viene bloccato, e viene fatto
+                      ripartire solo da uno START, e questi due
+                      caratteri non vengono passati alla coda di input. Se non
+                      impostato i due caratteri sono passati alla coda di input
+                      insieme agli altri.\\
+    \constd{IXANY}  & Se impostato con il controllo di flusso permette a
+                      qualunque carattere di far ripartire l'output bloccato da
+                      un carattere di STOP.\\
+    \constd{IXOFF}  & Se impostato abilita il controllo di flusso in
+                      ingresso. Il computer emette un carattere di STOP per
+                      bloccare l'input dal terminale e lo sblocca con il
+                      carattere START.\\
+    \constd{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa
+                      di ingresso; in Linux non è implementato e il kernel si
+                      comporta cose se fosse sempre impostato (è una estensione
+                      BSD).\\
+    \constd{IUTF8}  & Indica che l'input è in UTF-8, cosa che consente di
+                      utilizzare la cancellazione dei caratteri in maniera
+                      corretta (dal kernel 2.6.4 e non previsto in POSIX).\\
     \hline
   \end{tabular}
   \caption{Costanti identificative dei vari bit del flag di controllo
@@ -1655,44 +1650,44 @@ quelli ancora assenti sono stati indicati esplicitamente.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{OPOST} & Se impostato i caratteri vengono convertiti opportunamente
+    \constd{OPOST} & Se impostato i caratteri vengono convertiti opportunamente
                     (in maniera dipendente dall'implementazione) per la 
                     visualizzazione sul terminale, ad esempio al
                     carattere di a capo (NL) può venire aggiunto un ritorno
                     carrello (CR).\\
-    \const{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso 
+    \constd{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso 
                     in caratteri maiuscoli sull'uscita (non previsto da
                     POSIX).\\
-    \const{ONLCR} & Se impostato converte automaticamente il carattere di a 
+    \constd{ONLCR} & Se impostato converte automaticamente il carattere di a 
                     capo (NL) in un carattere di ritorno carrello (CR).\\
-    \const{OCRNL} & Se impostato converte automaticamente il carattere di a
+    \constd{OCRNL} & Se impostato converte automaticamente il carattere di a
                     capo (NL) nella coppia di caratteri ritorno carrello, a 
                     capo (CR-NL).\\
-    \const{ONOCR} & Se impostato converte il carattere di ritorno carrello
+    \constd{ONOCR} & Se impostato converte il carattere di ritorno carrello
                     (CR) nella coppia di caratteri CR-NL.\\
-    \const{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno
+    \constd{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno
                     carrello (CR).\\
-    \const{OFILL} & Se impostato in caso di ritardo sulla linea invia dei
+    \constd{OFILL} & Se impostato in caso di ritardo sulla linea invia dei
                     caratteri di riempimento invece di attendere.\\
-    \const{OFDEL} & Se impostato il carattere di riempimento è DEL
+    \constd{OFDEL} & Se impostato il carattere di riempimento è DEL
                     (\texttt{0x3F}), invece che NUL (\texttt{0x00}), (non
                     previsto da POSIX e non implementato su Linux).\\
-    \const{NLDLY} & Maschera per i bit che indicano il ritardo per il
+    \constd{NLDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di a capo (NL), i valori possibili sono 
                     \val{NL0} o \val{NL1}.\\
-    \const{CRDLY} & Maschera per i bit che indicano il ritardo per il
+    \constd{CRDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere ritorno carrello (CR), i valori possibili sono
                     \val{CR0}, \val{CR1}, \val{CR2} o \val{CR3}.\\
-    \const{TABDLY}& Maschera per i bit che indicano il ritardo per il
+    \constd{TABDLY}& Maschera per i bit che indicano il ritardo per il
                     carattere di tabulazione, i valori possibili sono
                     \val{TAB0}, \val{TAB1}, \val{TAB2} o \val{TAB3}.\\
-    \const{BSDLY} & Maschera per i bit che indicano il ritardo per il
+    \constd{BSDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di ritorno indietro (\textit{backspace}), i
                     valori possibili sono \val{BS0} o \val{BS1}.\\
-    \const{VTDLY} & Maschera per i bit che indicano il ritardo per il
+    \constd{VTDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di tabulazione verticale, i valori possibili sono
                     \val{VT0} o \val{VT1}.\\
-    \const{FFDLY} & Maschera per i bit che indicano il ritardo per il
+    \constd{FFDLY} & Maschera per i bit che indicano il ritardo per il
                     carattere di pagina nuova (\textit{form feed}), i valori
                     possibili sono \val{FF0} o \val{FF1}.\\
     \hline
@@ -1729,61 +1724,61 @@ il valore.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{CBAUD}  & Maschera dei bit (4+1) usati per impostare della velocità
-                     della linea (il \textit{baud rate}) in ingresso; non è
-                     presente in POSIX ed in Linux non è implementato in
-                     quanto viene usato un apposito campo di
-                     \struct{termios}.\\ 
-    \const{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della
-                     linea, non è presente in POSIX e per le stesse
-                     motivazioni del precedente non è implementato in Linux.\\
-    \const{CSIZE}  & Maschera per i bit usati per specificare la dimensione 
-                     del carattere inviato lungo la linea di trasmissione, i
-                     valore ne indica la lunghezza (in bit), ed i valori   
-                     possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8}
-                     corrispondenti ad un analogo numero di bit.\\
-    \const{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea
-                     seriale, se non impostato ne viene usato soltanto uno.\\
-    \const{CREAD}  & Se è impostato si può leggere l'input del terminale,
-                     altrimenti i caratteri in ingresso vengono scartati
-                     quando arrivano.\\
-    \const{PARENB} & Se impostato abilita la generazione il controllo di
-                     parità. La reazione in caso di errori dipende dai
-                     relativi valori per \var{c\_iflag}, riportati in 
-                     tab.~\ref{tab:sess_termios_iflag}. Se non è impostato i
-                     bit di parità non vengono generati e i caratteri non
-                     vengono controllati.\\
-    \const{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se 
-                     impostato viene usata una parità è dispari, altrimenti 
-                     viene usata una parità pari.\\
-    \const{HUPCL}  & Se è impostato viene distaccata la connessione del
-                     modem quando l'ultimo dei processi che ha ancora un file
-                     aperto sul terminale lo chiude o esce.\\
-    \const{LOBLK}  & Se impostato blocca l'output su un strato di shell non
-                     corrente, non è presente in POSIX e non è implementato
-                     da Linux.\\
-    \const{CLOCAL} & Se impostato indica che il terminale è connesso in locale
-                     e che le linee di controllo del modem devono essere
-                     ignorate. Se non impostato effettuando una chiamata ad
-                     \func{open} senza aver specificato il flag di
-                     \const{O\_NONBLOCK} si bloccherà il processo finché 
-                     non si è stabilita una connessione con il modem; inoltre 
-                     se viene rilevata una disconnessione viene inviato un
-                     segnale di \signal{SIGHUP} al processo di controllo del
-                     terminale. La lettura su un terminale sconnesso comporta
-                     una condizione di \textit{end of file} e la scrittura un
-                     errore di \errcode{EIO}.\\
-    \const{CIBAUD} & Maschera dei bit della velocità della linea in
-                     ingresso; analogo a \const{CBAUD}, non è previsto da
-                     POSIX e non è implementato in Linux dato che è
-                     mantenuto in un apposito campo di \struct{termios}.\\
-    \const{CMSPAR} & imposta un bit di parità costante: se \const{PARODD} è
-                     impostato la parità è sempre 1 (\textit{MARK}) se non è
-                     impostato la parità è sempre 0 (\textit{SPACE}), non è
-                     previsto da POSIX.\\ 
+    \constd{CBAUD}  & Maschera dei bit (4+1) usati per impostare della velocità
+                      della linea (il \textit{baud rate}) in ingresso; non è
+                      presente in POSIX ed in Linux non è implementato in
+                      quanto viene usato un apposito campo di
+                      \struct{termios}.\\ 
+    \constd{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della
+                      linea, non è presente in POSIX e per le stesse
+                      motivazioni del precedente non è implementato in Linux.\\
+    \constd{CSIZE}  & Maschera per i bit usati per specificare la dimensione 
+                      del carattere inviato lungo la linea di trasmissione, i
+                      valore ne indica la lunghezza (in bit), ed i valori   
+                      possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8}
+                      corrispondenti ad un analogo numero di bit.\\
+    \constd{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea
+                      seriale, se non impostato ne viene usato soltanto uno.\\
+    \constd{CREAD}  & Se è impostato si può leggere l'input del terminale,
+                      altrimenti i caratteri in ingresso vengono scartati
+                      quando arrivano.\\
+    \constd{PARENB} & Se impostato abilita la generazione il controllo di
+                      parità. La reazione in caso di errori dipende dai
+                      relativi valori per \var{c\_iflag}, riportati in 
+                      tab.~\ref{tab:sess_termios_iflag}. Se non è impostato i
+                      bit di parità non vengono generati e i caratteri non
+                      vengono controllati.\\
+    \constd{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se 
+                      impostato viene usata una parità è dispari, altrimenti 
+                      viene usata una parità pari.\\
+    \constd{HUPCL}  & Se è impostato viene distaccata la connessione del
+                      modem quando l'ultimo dei processi che ha ancora un file
+                      aperto sul terminale lo chiude o esce.\\
+    \constd{LOBLK}  & Se impostato blocca l'output su un strato di shell non
+                      corrente, non è presente in POSIX e non è implementato
+                      da Linux.\\
+    \constd{CLOCAL} & Se impostato indica che il terminale è connesso in locale
+                      e che le linee di controllo del modem devono essere
+                      ignorate. Se non impostato effettuando una chiamata ad
+                      \func{open} senza aver specificato il flag di
+                      \const{O\_NONBLOCK} si bloccherà il processo finché 
+                      non si è stabilita una connessione con il modem; inoltre 
+                      se viene rilevata una disconnessione viene inviato un
+                      segnale di \signal{SIGHUP} al processo di controllo del
+                      terminale. La lettura su un terminale sconnesso comporta
+                      una condizione di \textit{end of file} e la scrittura un
+                      errore di \errcode{EIO}.\\
+    \constd{CIBAUD} & Maschera dei bit della velocità della linea in
+                      ingresso; analogo a \const{CBAUD}, non è previsto da
+                      POSIX e non è implementato in Linux dato che è
+                      mantenuto in un apposito campo di \struct{termios}.\\
+    \constd{CMSPAR} & imposta un bit di parità costante: se \const{PARODD} è
+                      impostato la parità è sempre 1 (\textit{MARK}) se non è
+                      impostato la parità è sempre 0 (\textit{SPACE}), non è
+                      previsto da POSIX.\\ 
 % vedi: http://www.lothosoft.ch/thomas/libmip/markspaceparity.php
-    \const{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
-                     attraverso l'utilizzo delle dei due fili di RTS e CTS.\\
+    \constd{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
+                      attraverso l'utilizzo delle dei due fili di RTS e CTS.\\
     \hline
   \end{tabular}
   \caption{Costanti identificative dei vari bit del flag di controllo
@@ -1821,72 +1816,72 @@ due campi aggiuntivi, \var{c\_ispeed} e \var{c\_ospeed}, nella struttura
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{ISIG}   & Se impostato abilita il riconoscimento dei caratteri
-                     INTR, QUIT, e SUSP generando il relativo segnale.\\
-    \const{ICANON} & Se impostato il terminale opera in modalità canonica,
-                     altrimenti opera in modalità non canonica.\\
-    \const{XCASE}  & Se impostato il terminale funziona solo con le
-                     maiuscole. L'input è convertito in minuscole tranne per i
-                     caratteri preceduti da una ``\texttt{\bslash}''. In output
-                     le maiuscole sono precedute da una ``\texttt{\bslash}'' e 
-                     le minuscole convertite in maiuscole. Non è presente in
-                     POSIX.\\
-    \const{ECHO}   & Se è impostato viene attivato l'eco dei caratteri in
-                     input sull'output del terminale.\\
-    \const{ECHOE}  & Se è impostato l'eco mostra la cancellazione di un
-                     carattere in input (in reazione al carattere ERASE)
-                     cancellando l'ultimo carattere della riga corrente dallo
-                     schermo; altrimenti il carattere è rimandato in eco per
-                     mostrare quanto accaduto (usato per i terminali con
-                     l'uscita su una stampante).\\
-    \const{ECHOK}  & Se impostato abilita il trattamento della visualizzazione
-                     del carattere KILL, andando a capo dopo aver visualizzato
-                     lo stesso, altrimenti viene solo mostrato il carattere e
-                     sta all'utente ricordare che l'input precedente è stato
-                     cancellato.\\
-    \const{ECHONL} & Se impostato viene effettuato l'eco di un a
-                     capo (\verb|\n|) anche se non è stato impostato
-                     \const{ECHO}.\\
-    \const{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di
-                     controllo ASCII (tranne TAB, NL, START, e STOP) sono
-                     mostrati nella forma che prepone un ``\texttt{\circonf}'' 
-                     alla lettera ottenuta sommando \texttt{0x40} al valore del
-                     carattere (di solito questi si possono ottenere anche
-                     direttamente premendo il tasto \texttt{ctrl} più la
-                     relativa lettera). Non è presente in POSIX.\\
-    \const{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di
-                     cancellazione in una modalità adatta ai terminali con
-                     l'uscita su stampante; l'invio del carattere di ERASE
-                     comporta la stampa di un ``\texttt{|}'' seguito dal
-                     carattere cancellato, e così via in caso di successive
-                     cancellazioni, quando si riprende ad immettere carattere 
-                     normali prima verrà stampata una ``\texttt{/}''. Non è
-                     presente in POSIX.\\
-    \const{ECHOKE} & Se impostato abilita il trattamento della visualizzazione
-                     del carattere KILL cancellando i caratteri precedenti
-                     nella linea secondo le modalità specificate dai valori di
-                     \const{ECHOE} e \const{ECHOPRT}. Non è presente in
-                     POSIX.\\ 
-    \const{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in
-                     lettura. Non è presente in POSIX e non è supportato da
-                     Linux.\\
-    \const{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
-                     attivato dal carattere DISCARD. Non è presente in POSIX e
-                     non è supportato da Linux.\\
-    \const{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
-                     e uscita quando vengono emessi i segnali \signal{SIGINT}, 
-                     \signal{SIGQUIT} e \signal{SIGSUSP}.\\
-    \const{TOSTOP} & Se abilitato, con il supporto per il job control presente,
-                     genera il segnale \signal{SIGTTOU} per un processo in
-                     background che cerca di scrivere sul terminale.\\
-    \const{PENDIN} & Indica che la linea deve essere ristampata, viene
-                     attivato dal carattere REPRINT e resta attivo fino alla
-                     fine della ristampa. Non è presente in POSIX e
-                     non è supportato in Linux.\\
-    \const{IEXTEN} & Abilita alcune estensioni previste dalla
-                     implementazione. Deve essere impostato perché caratteri
-                     speciali come EOL2, LNEXT, REPRINT e WERASE possano
-                     essere interpretati.\\
+    \constd{ISIG}   & Se impostato abilita il riconoscimento dei caratteri
+                      INTR, QUIT, e SUSP generando il relativo segnale.\\
+    \constd{ICANON} & Se impostato il terminale opera in modalità canonica,
+                      altrimenti opera in modalità non canonica.\\
+    \constd{XCASE}  & Se impostato il terminale funziona solo con le
+                      maiuscole. L'input è convertito in minuscole tranne per i
+                      caratteri preceduti da una ``\texttt{\bslash}''. In output
+                      le maiuscole sono precedute da una ``\texttt{\bslash}'' e 
+                      le minuscole convertite in maiuscole. Non è presente in
+                      POSIX.\\
+    \constd{ECHO}   & Se è impostato viene attivato l'eco dei caratteri in
+                      input sull'output del terminale.\\
+    \constd{ECHOE}  & Se è impostato l'eco mostra la cancellazione di un
+                      carattere in input (in reazione al carattere ERASE)
+                      cancellando l'ultimo carattere della riga corrente dallo
+                      schermo; altrimenti il carattere è rimandato in eco per
+                      mostrare quanto accaduto (usato per i terminali con
+                      l'uscita su una stampante).\\
+    \constd{ECHOK}  & Se impostato abilita il trattamento della visualizzazione
+                      del carattere KILL, andando a capo dopo aver visualizzato
+                      lo stesso, altrimenti viene solo mostrato il carattere e
+                      sta all'utente ricordare che l'input precedente è stato
+                      cancellato.\\
+    \constd{ECHONL} & Se impostato viene effettuato l'eco di un a
+                      capo (\verb|\n|) anche se non è stato impostato
+                      \const{ECHO}.\\
+    \constd{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di
+                      controllo ASCII (tranne TAB, NL, START, e STOP) sono
+                      mostrati nella forma che prepone un ``\texttt{\circonf}'' 
+                      alla lettera ottenuta sommando \texttt{0x40} al valore del
+                      carattere (di solito questi si possono ottenere anche
+                      direttamente premendo il tasto \texttt{ctrl} più la
+                      relativa lettera). Non è presente in POSIX.\\
+    \constd{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di
+                      cancellazione in una modalità adatta ai terminali con
+                      l'uscita su stampante; l'invio del carattere di ERASE
+                      comporta la stampa di un ``\texttt{|}'' seguito dal
+                      carattere cancellato, e così via in caso di successive
+                      cancellazioni, quando si riprende ad immettere carattere 
+                      normali prima verrà stampata una ``\texttt{/}''. Non è
+                      presente in POSIX.\\
+    \constd{ECHOKE} & Se impostato abilita il trattamento della visualizzazione
+                      del carattere KILL cancellando i caratteri precedenti
+                      nella linea secondo le modalità specificate dai valori di
+                      \const{ECHOE} e \const{ECHOPRT}. Non è presente in
+                      POSIX.\\ 
+    \constd{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in
+                      lettura. Non è presente in POSIX e non è supportato da
+                      Linux.\\
+    \constd{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
+                      attivato dal carattere DISCARD. Non è presente in POSIX e
+                      non è supportato da Linux.\\
+    \constd{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
+                      e uscita quando vengono emessi i segnali \signal{SIGINT}, 
+                      \signal{SIGQUIT} e \signal{SIGSUSP}.\\
+    \constd{TOSTOP} & Se abilitato, con il supporto per il job control presente,
+                      genera il segnale \signal{SIGTTOU} per un processo in
+                      background che cerca di scrivere sul terminale.\\
+    \constd{PENDIN} & Indica che la linea deve essere ristampata, viene
+                      attivato dal carattere REPRINT e resta attivo fino alla
+                      fine della ristampa. Non è presente in POSIX e
+                      non è supportato in Linux.\\
+    \constd{IEXTEN} & Abilita alcune estensioni previste dalla
+                      implementazione. Deve essere impostato perché caratteri
+                      speciali come EOL2, LNEXT, REPRINT e WERASE possano
+                      essere interpretati.\\
     \hline
   \end{tabular}
   \caption{Costanti identificative dei vari bit del flag di controllo
@@ -1914,7 +1909,7 @@ non è impostato \const{ICANON}.
 Oltre ai vari flag per gestire le varie caratteristiche dei terminali,
 \struct{termios} contiene pure il campo \var{c\_cc} che viene usato per
 impostare i caratteri speciali associati alle varie funzioni di controllo. Il
-numero di questi caratteri speciali è indicato dalla costante \const{NCCS},
+numero di questi caratteri speciali è indicato dalla costante \constd{NCCS},
 POSIX ne specifica almeno 11, ma molte implementazioni ne definiscono molti
 altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri
   effettivamente definiti sono solo 17.}
@@ -1927,71 +1922,71 @@ altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri
     \textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\
     \hline
     \hline
-    \const{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt, 
-                                                 provoca l'emissione di 
-                                                 \signal{SIGINT}.\\
-    \const{VQUIT} &\texttt{0x1C}&(\texttt{C-\bslash})& Carattere di uscita,  
-                                                 provoca l'emissione di 
-                                                 \signal{SIGQUIT}.\\
-    \const{VERASE}&\texttt{0x7f}&DEL,\texttt{C-?}& Carattere di ERASE, cancella
-                                                 l'ultimo carattere
-                                                 precedente nella linea.\\
-    \const{VKILL} &\texttt{0x15}&(\texttt{C-u})& Carattere di KILL, cancella
-                                                 l'intera riga.\\
-    \const{VEOF}  &\texttt{0x04}&(\texttt{C-d})& Carattere di
-                                                 \textit{end-of-file}. Causa
-                                                 l'invio del contenuto del
-                                                 buffer di ingresso al
-                                                 processo in lettura anche se
-                                                 non è ancora stato ricevuto
-                                                 un a capo. Se è il primo
-                                                 carattere immesso comporta il
-                                                 ritorno di \func{read} con
-                                                 zero caratteri, cioè la
-                                                 condizione di
-                                                 \textit{end-of-file}.\\
-    \const{VMIN}  &     ---     &  ---   & Numero minimo di caratteri per una 
-                                           lettura in modo non canonico.\\
-    \const{VEOL}  &\texttt{0x00}& NUL &    Carattere di fine riga. Agisce come
-                                           un a capo, ma non viene scartato ed
-                                           è letto come l'ultimo carattere
-                                           nella riga.\\
-    \const{VTIME} &     ---     &  ---   & Timeout, in decimi di secondo, per
-                                           una lettura in modo non canonico.\\
-    \const{VEOL2} &\texttt{0x00}&   NUL  & Ulteriore carattere di fine
-                                           riga. Ha lo stesso effetto di
-                                           \const{VEOL} ma può essere un
-                                           carattere diverso. \\
-    \const{VSWTC} &\texttt{0x00}&   NUL  & Carattere di switch. Non supportato
-                                           in Linux.\\
-    \const{VSTART}&\texttt{0x17}&(\texttt{C-q})& Carattere di START. Riavvia un
+    \constd{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt, 
+                                                  provoca l'emissione di 
+                                                  \signal{SIGINT}.\\
+    \constd{VQUIT} &\texttt{0x1C}&(\texttt{C-\bslash})& Carattere di uscita,  
+                                                        provoca l'emissione di 
+                                                        \signal{SIGQUIT}.\\
+    \constd{VERASE}&\texttt{0x7f}&DEL,\texttt{C-?}& Carattere di ERASE, cancella
+                                                    l'ultimo carattere
+                                                    precedente nella linea.\\
+    \constd{VKILL} &\texttt{0x15}&(\texttt{C-u})& Carattere di KILL, cancella
+                                                  l'intera riga.\\
+    \constd{VEOF}  &\texttt{0x04}&(\texttt{C-d})& Carattere di
+                                                  \textit{end-of-file}. Causa
+                                                  l'invio del contenuto del
+                                                  buffer di ingresso al
+                                                  processo in lettura anche se
+                                                  non è ancora stato ricevuto
+                                                  un a capo. Se è il primo
+                                                  carattere immesso comporta il
+                                                  ritorno di \func{read} con
+                                                  zero caratteri, cioè la
+                                                  condizione di
+                                                  \textit{end-of-file}.\\
+    \constd{VMIN}  &     ---     &  ---   & Numero minimo di caratteri per una 
+                                            lettura in modo non canonico.\\
+    \constd{VEOL}  &\texttt{0x00}& NUL &    Carattere di fine riga. Agisce come
+                                         un a capo, ma non viene scartato ed
+                                         è letto come l'ultimo carattere
+                                         nella riga.\\
+    \constd{VTIME} &     ---     &  ---   & Timeout, in decimi di secondo, per
+                                            una lettura in modo non canonico.\\
+    \constd{VEOL2} &\texttt{0x00}&   NUL  & Ulteriore carattere di fine
+                                            riga. Ha lo stesso effetto di
+                                            \const{VEOL} ma può essere un
+                                            carattere diverso. \\
+    \constd{VSWTC} &\texttt{0x00}&   NUL  & Carattere di switch. Non supportato
+                                            in Linux.\\
+    \constd{VSTART}&\texttt{0x17}&(\texttt{C-q})& Carattere di START. Riavvia un
                                                  output bloccato da uno STOP.\\
-    \const{VSTOP} &\texttt{0x19}&(\texttt{C-s})& Carattere di STOP. Blocca
+    \constd{VSTOP} &\texttt{0x19}&(\texttt{C-s})& Carattere di STOP. Blocca
                                                  l'output fintanto che non
                                                  viene premuto un carattere di
                                                  START.\\
-    \const{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di
+    \constd{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di
                                                  sospensione. Invia il segnale
                                                  \signal{SIGTSTP}.\\
-    \const{VDSUSP}&\texttt{0x19}&(\texttt{C-y})& Carattere di sospensione
+    \constd{VDSUSP}&\texttt{0x19}&(\texttt{C-y})& Carattere di sospensione
                                                  ritardata. Invia il segnale 
                                                  \signal{SIGTSTP} quando il
                                                  carattere viene letto dal
                                                  programma, (non presente in
                                                  POSIX e non riconosciuto in
                                                  Linux).\\ 
-    \const{VLNEXT}&\texttt{0x16}&(\texttt{C-v})& Carattere di escape, serve a
+    \constd{VLNEXT}&\texttt{0x16}&(\texttt{C-v})& Carattere di escape, serve a
                                                  quotare il carattere
                                                  successivo che non viene
                                                  interpretato ma passato
                                                  direttamente all'output.\\
-    \const{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una
+    \constd{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una
                                                  parola.\\
-    \const{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non
+    \constd{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non
                                                  ancora letti (non presente in
                                                  POSIX).\\
-    \const{VDISCARD}&\texttt{0x0F}&(\texttt{C-o})& Non riconosciuto in Linux.\\
-    \const{VSTATUS} &\texttt{0x13}&(\texttt{C-t})& Non riconosciuto in Linux.\\
+    \constd{VDISCARD}&\texttt{0x0F}&(\texttt{C-o})& Non riconosciuto in Linux.\\
+    \constd{VSTATUS} &\texttt{0x13}&(\texttt{C-t})& Non riconosciuto in Linux.\\
     \hline
   \end{tabular}
   \caption{Valori dei caratteri di controllo mantenuti nel campo \var{c\_cc}
@@ -2086,11 +2081,11 @@ utili qualora si cambino i parametri di output.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{TCSANOW}  & Esegue i cambiamenti in maniera immediata.\\
-    \const{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che
-                       tutto l'output presente sulle code è stato scritto.\\
-    \const{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta
-                       tutti i dati presenti sulla coda di input.\\
+    \constd{TCSANOW}  & Esegue i cambiamenti in maniera immediata.\\
+    \constd{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che
+                        tutto l'output presente sulle code è stato scritto.\\
+    \constd{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta
+                        tutti i dati presenti sulla coda di input.\\
     \hline
   \end{tabular}
   \caption{Possibili valori per l'argomento \param{optional\_actions} della
@@ -2184,9 +2179,9 @@ velocità prescelta \param{speed} all'interno della struttura puntata da
 chiamare \func{tcsetattr}.
 
 Si tenga presente che per le linee seriali solo alcuni valori di velocità sono
-validi; questi possono essere specificati direttamente (le \acr{glibc}
-prevedono che i valori siano indicati in bit per secondo), ma in generale
-altre versioni di librerie possono utilizzare dei valori diversi. Per questo
+validi; questi possono essere specificati direttamente (la \acr{glibc}
+prevede che i valori siano indicati in bit per secondo), ma in generale
+altre versioni di libreria possono utilizzare dei valori diversi. Per questo
 POSIX.1 prevede una serie di costanti che però servono solo per specificare le
 velocità tipiche delle linee seriali:
 \begin{verbatim}
@@ -2205,7 +2200,7 @@ la velocità della linea di trasmissione; se questa non corrisponde a quella
 del terminale quest'ultimo non potrà funzionare: quando il terminale non è
 seriale il valore non influisce sulla velocità di trasmissione dei dati. 
 
-In generale impostare un valore nullo (\val{B0}) sulla linea di output fa si
+In generale impostare un valore nullo (\val{B0}) sulla linea di output fa sì
 che il modem non asserisca più le linee di controllo, interrompendo di fatto
 la connessione, qualora invece si utilizzi questo valore per la linea di input
 l'effetto sarà quello di rendere la sua velocità identica a quella della linea
@@ -2371,9 +2366,9 @@ di uscita cancellerà i dati scritti ma non ancora trasmessi.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{TCIFLUSH} & Cancella i dati sulla coda di ingresso.\\
-    \const{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\
-    \const{TCIOFLUSH}& Cancella i dati su entrambe le code.\\
+    \constd{TCIFLUSH} & Cancella i dati sulla coda di ingresso.\\
+    \constd{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\
+    \constd{TCIOFLUSH}& Cancella i dati su entrambe le code.\\
     \hline
   \end{tabular}
   \caption{Possibili valori per l'argomento \param{queue} della
@@ -2411,12 +2406,12 @@ riportati in tab.~\ref{tab:sess_tcflow_action}.
     \textbf{Valore}& \textbf{Azione}\\
     \hline
     \hline
-    \const{TCOOFF}& Sospende l'output.\\
-    \const{TCOON} & Riprende un output precedentemente sospeso.\\
-    \const{TCIOFF}& Il sistema trasmette un carattere di STOP, che 
-                    fa interrompere la trasmissione dei dati dal terminale.\\
-    \const{TCION} & Il sistema trasmette un carattere di START, che 
-                    fa riprendere la trasmissione dei dati dal terminale.\\
+    \constd{TCOOFF}& Sospende l'output.\\
+    \constd{TCOON} & Riprende un output precedentemente sospeso.\\
+    \constd{TCIOFF}& Il sistema trasmette un carattere di STOP, che 
+                     fa interrompere la trasmissione dei dati dal terminale.\\
+    \constd{TCION} & Il sistema trasmette un carattere di START, che 
+                     fa riprendere la trasmissione dei dati dal terminale.\\
     \hline
   \end{tabular}
   \caption{Possibili valori per l'argomento \param{action} della
@@ -2494,6 +2489,7 @@ Da fare.
 
 Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia.
 % vedi man pts
+% vedi 
 
 
 \subsection{Allocazione dei terminali virtuali}
@@ -2504,6 +2500,8 @@ Qui vanno le cose su \func{openpty} e compagnia.
 % TODO le ioctl dei terminali (man tty_ioctl)
 % e http://www.net-security.org/article.php?id=83
 % TODO trattare \func{posix\_openpt}
+% vedi http://lwn.net/Articles/688809/,
+% http://man7.org/linux/man-pages/man3/ptsname.3.html
 
 
 % TODO materiale sulle seriali