Aggiornamento al 2010 delle note di copyright
[gapil.git] / session.tex
index b3ce7d0ecc05abef9243b527feac7f2f2fcb5ba4..92564cd2e1e11b28c0d8730105bad63513b48729 100644 (file)
@@ -1,6 +1,6 @@
 %% session.tex
 %%
-%% Copyright (C) 2000-2005 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2010 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",
@@ -8,6 +8,7 @@
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
+
 \chapter{Terminali e sessioni di lavoro}
 \label{cha:session}
 
@@ -32,11 +33,11 @@ Viene comunemente chiamato \textit{job control} quell'insieme di funzionalit
 il cui scopo è quello di permettere ad un utente di poter sfruttare le
 capacità multitasking di un sistema Unix per eseguire in contemporanea più
 processi, pur potendo accedere, di solito, ad un solo terminale,\footnote{con
-  X e con i terminali virtuali tutto questo non è più vero, dato che si può
-  accedere a molti terminali in contemporanea da una singola postazione di
-  lavoro, ma il sistema è nato prima dell'esistenza di tutto ciò.} avendo cioè
-un solo punto in cui si può avere accesso all'input ed all'output degli
-stessi.
+  \textit{X Window} e con i terminali virtuali tutto questo non è più vero,
+  dato che si può accedere a molti terminali in contemporanea da una singola
+  postazione di lavoro, ma il sistema è nato prima dell'esistenza di tutto
+  ciò.} avendo cioè un solo punto in cui si può avere accesso all'input ed
+all'output degli stessi.
 
 
 \subsection{Una panoramica introduttiva}
@@ -46,7 +47,7 @@ Il \textit{job control} 
 negli anni '80, e successivamente standardizzata da POSIX.1; la sua
 disponibilità nel sistema è verificabile attraverso il controllo della macro
 \macro{\_POSIX\_JOB\_CONTROL}. In generale il \textit{job control} richiede il
-supporto sia da parte della shell (quasi tutte ormai lo fanno), che da parte
+supporto sia da parte della shell (quasi tutte ormai lo hanno), che da parte
 del kernel; in particolare il kernel deve assicurare sia la presenza di un
 driver per i terminali abilitato al \textit{job control} che quella dei
 relativi segnali illustrati in sez.~\ref{sec:sig_job_control}. 
@@ -70,20 +71,22 @@ Si noti come si sia parlato di comandi e non di programmi o processi; fra le
 funzionalità della shell infatti c'è anche quella di consentire di concatenare
 più programmi in una sola riga di comando con le pipe, ed in tal caso verranno
 eseguiti più programmi, inoltre, anche quando si invoca un singolo programma,
-questo potrà sempre lanciare sottoprocessi per eseguire dei compiti specifici.
+questo potrà sempre lanciare sotto-processi per eseguire dei compiti specifici.
 
 Per questo l'esecuzione di un comando può originare più di un processo; quindi
 nella gestione del job control non si può far riferimento ai singoli processi.
 Per questo il kernel prevede la possibilità di raggruppare più processi in un
-\textit{process group} (detto anche \textsl{raggruppamento di processi}, vedi
-sez.~\ref{sec:sess_proc_group}) e la shell farà sì che tutti i processi che
-originano da una riga di comando appartengano allo stesso raggruppamento, in
-modo che le varie funzioni di controllo, ed i segnali inviati dal terminale,
-possano fare riferimento ad esso.
+\itindex{process~group} \textit{process group} (detto anche
+\textsl{raggruppamento di processi}, vedi sez.~\ref{sec:sess_proc_group}) e la
+shell farà sì che tutti i processi che originano da una riga di comando
+appartengano allo stesso raggruppamento, in modo che le varie funzioni di
+controllo, ed i segnali inviati dal terminale, possano fare riferimento ad
+esso.
 
 In generale allora all'interno di una sessione avremo un eventuale (può non
-esserci) \textit{process group} in \textit{foreground}, che riunisce i
-processi che possono accedere al terminale, e più \textit{process group} in
+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 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
@@ -110,8 +113,10 @@ sez.~\ref{sec:proc_wait}).
 \subsection{I \textit{process group} e le \textsl{sessioni}}
 \label{sec:sess_proc_group}
 
+\itindbeg{process~group}
+
 Come accennato in sez.~\ref{sec:sess_job_control_overview} nel job control i
-processi vengono raggruppati in \textit{process group} e \textit{sessioni};
+processi vengono raggruppati in \textit{process group} e \textsl{sessioni};
 per far questo vengono utilizzati due ulteriori identificatori (oltre quelli
 visti in sez.~\ref{sec:proc_pid}) che il kernel associa a ciascun
 processo:\footnote{in Linux questi identificatori sono mantenuti nei campi
@@ -162,8 +167,8 @@ funzione \funcd{getsid}, che per
   caso di successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà
   i valori:
     \begin{errlist}
-    \item[\errcode{ESRCH}] Il processo selezionato non esiste.
-    \item[\errcode{EPERM}] In alcune implementazioni viene restituito quando il
+    \item[\errcode{ESRCH}] il processo selezionato non esiste.
+    \item[\errcode{EPERM}] in alcune implementazioni viene restituito quando il
       processo selezionato non fa parte della stessa sessione del processo
       corrente.
     \end{errlist}
@@ -178,15 +183,15 @@ stessa sessione del padre. Vedremo poi come sia possibile creare pi
 processi dall'uno all'altro, ma sempre all'interno di una stessa sessione.
 
 Ciascun raggruppamento di processi ha sempre un processo principale, il
-cosiddetto \textit{process group leader}, che è identificato dall'avere un
-\acr{pgid} uguale al suo \acr{pid}, in genere questo è il primo processo del
-raggruppamento, che si incarica di lanciare tutti gli altri. Un nuovo
-raggruppamento si crea con la funzione \funcd{setpgrp},\footnote{questa è la
-  definizione di POSIX.1, BSD definisce una funzione con lo stesso nome, che
-  però è identica a \func{setpgid}; nelle \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}.} il cui prototipo è:
+cosiddetto \itindex{process~group~leader} \textit{process group leader}, che è
+identificato dall'avere un \acr{pgid} uguale al suo \acr{pid}, in genere
+questo è il primo processo del raggruppamento, che si incarica di lanciare
+tutti gli altri. Un nuovo raggruppamento si crea con la funzione
+\funcd{setpgrp},\footnote{questa è la definizione di POSIX.1, BSD definisce
+  una funzione con lo stesso nome, che però è identica a \func{setpgid}; nelle
+  \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}.} il cui prototipo è:
 \begin{prototype}{unistd.h}{int setpgrp(void)}
   Modifica il \acr{pgid} al valore del \acr{pid} del processo corrente.
   
@@ -195,21 +200,21 @@ raggruppamento si crea con la funzione \funcd{setpgrp},\footnote{questa 
 \end{prototype}
 
 La funzione, assegnando al \acr{pgid} il valore del \acr{pid} processo
-corrente, rende questo \textit{group leader} di un nuovo raggruppamento, tutti
-i successivi processi da esso creati apparterranno (a meno di non cambiare di
-nuovo il \acr{pgid}) al nuovo raggruppamento. È possibile invece spostare un
-processo da un raggruppamento ad un altro con la funzione \funcd{setpgid}, il
-cui prototipo è:
+corrente, rende questo \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 \acr{pgid}) al nuovo
+raggruppamento. È possibile invece spostare un processo da un raggruppamento
+ad un altro con la funzione \funcd{setpgid}, il cui prototipo è:
 \begin{prototype}{unistd.h}{int setpgid(pid\_t pid, pid\_t pgid)}
   Assegna al \acr{pgid} del processo \param{pid} il valore \param{pgid}.
   
   \bodydesc{La funzione ritorna il valore del nuovo \textit{process group}, e
   -1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\errcode{ESRCH}] Il processo selezionato non esiste.
-    \item[\errcode{EPERM}] Il cambiamento non è consentito.
-    \item[\errcode{EACCES}] Il processo ha già eseguito una \func{exec}.
-    \item[\errcode{EINVAL}] Il valore di \param{pgid} è negativo.
+    \item[\errcode{ESRCH}] il processo selezionato non esiste.
+    \item[\errcode{EPERM}] il cambiamento non è consentito.
+    \item[\errcode{EACCES}] il processo ha già eseguito una \func{exec}.
+    \item[\errcode{EINVAL}] il valore di \param{pgid} è negativo.
     \end{errlist}
  }
 \end{prototype}
@@ -228,14 +233,14 @@ processo selezionato; pertanto \func{setpgrp} 
   0)}.
 
 Di norma questa funzione viene usata dalla shell quando si usano delle
-pipeline, per mettere nello stesso process group tutti i programmi lanciati su
-ogni linea di comando; essa viene chiamata dopo una \func{fork} 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 race 
-condition\index{\textit{race~condition}}. 
+pipeline, per mettere nello stesso \textit{process group} tutti i programmi
+lanciati su ogni linea di comando; essa viene chiamata dopo una \func{fork}
+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}.
 
 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
@@ -260,21 +265,22 @@ unico componente.  Inoltre la funzione distacca il processo da ogni 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à 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 \acr{pgid} del padre ma un \acr{pid} diverso, non ci
-siano possibilità di errore.\footnote{potrebbe sorgere il dubbio che, per il
-  riutilizzo dei valori dei \acr{pid} fatto nella creazione dei nuovi processi
-  (vedi sez.~\ref{sec:proc_pid}), il figlio venga ad assumere un valore
-  corrispondente ad un process group esistente; questo viene evitato dal
-  kernel che considera come disponibili per un nuovo \acr{pid} solo valori che
-  non corrispondono ad altri \acr{pid}, \acr{pgid} o \acr{sid} in uso nel
+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
+\acr{pgid} del padre ma un \acr{pid} diverso, non ci siano possibilità di
+errore.\footnote{potrebbe sorgere il dubbio che, per il riutilizzo dei valori
+  dei \acr{pid} fatto nella creazione dei nuovi processi (vedi
+  sez.~\ref{sec:proc_pid}), il figlio venga ad assumere un valore
+  corrispondente ad un \textit{process group} esistente; questo viene evitato
+  dal kernel che considera come disponibili per un nuovo \acr{pid} solo valori
+  che non corrispondono ad altri \acr{pid}, \acr{pgid} o \acr{sid} in uso nel
   sistema.} Questa funzione viene usata di solito nel processo di login (per i
 dettagli vedi sez.~\ref{sec:sess_login}) per raggruppare in una sessione tutti
 i comandi eseguiti da un utente dalla sua shell.
 
-
+\itindend{process~group}
 
 \subsection{Il terminale di controllo e il controllo di sessione}
 \label{sec:sess_ctrl_term}
@@ -292,7 +298,7 @@ dal quale ricevono gli eventuali segnali da tastiera.
 A tale scopo lo standard POSIX.1 prevede che ad ogni sessione possa essere
 associato un terminale di controllo; in Linux questo viene realizzato
 mantenendo fra gli attributi di ciascun processo anche qual'è il suo terminale
-di controllo.\footnote{Lo standard POSIX.1 non specifica nulla riguardo
+di controllo.\footnote{lo standard POSIX.1 non specifica nulla riguardo
   l'implementazione; in Linux anch'esso viene mantenuto nella solita struttura
   \struct{task\_struct}, nel campo \var{tty}.}  In generale ogni processo
 eredita dal padre, insieme al \acr{pgid} e al \acr{sid} anche il terminale di
@@ -332,10 +338,10 @@ funzione \funcd{tcsetpgrp}, il cui prototipo 
   \bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
     errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\errcode{ENOTTY}] Il file \param{fd} non corrisponde al terminale di
+    \item[\errcode{ENOTTY}] il file \param{fd} non corrisponde al terminale di
       controllo del processo chiamante.
-    \item[\errcode{ENOSYS}] Il sistema non supporta il job control.
-    \item[\errcode{EPERM}] Il \textit{process group} specificato non è nella
+    \item[\errcode{ENOSYS}] il sistema non supporta il job control.
+    \item[\errcode{EPERM}] il \textit{process group} specificato non è nella
     stessa sessione del processo chiamante.
     \end{errlist}
     ed inoltre \errval{EBADF} ed \errval{EINVAL}. 
@@ -344,19 +350,20 @@ funzione \funcd{tcsetpgrp}, il cui prototipo 
 \noindent la funzione può essere eseguita con successo solo da
 un processo nella stessa sessione e con lo stesso terminale di controllo. 
 
-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 \const{SIGTTIN} o \const{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}.
+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 \const{SIGTTIN} o \const{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}.
 
 Un processo può controllare qual è il gruppo di \textit{foreground} associato
 ad un terminale con la funzione \funcd{tcgetpgrp}, il cui prototipo è:
@@ -369,7 +376,7 @@ ad un terminale con la funzione \funcd{tcgetpgrp}, il cui prototipo 
     gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso
     \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\errcode{ENOTTY}] Non c'è un terminale di controllo o \param{fd} non
+    \item[\errcode{ENOTTY}] non c'è un terminale di controllo o \param{fd} non
       corrisponde al terminale di controllo del processo chiamante.
     \end{errlist}
     ed inoltre \errval{EBADF} ed \errval{ENOSYS}. 
@@ -388,19 +395,20 @@ disponendo pi
 decifrare, ma deve poi leggere la password dal terminale.
 
 Un'altra caratteristica del terminale di controllo usata nel job control è che
-utilizzando su di esso le combinazioni di tasti speciali (\cmd{C-z},
-\cmd{C-c}, \cmd{C-y} e \verb|C-\|) si farà sì che il kernel invii i
+utilizzando su di esso le combinazioni di tasti speciali (\texttt{C-z},
+\texttt{C-c}, \texttt{C-y} e \texttt{C-|}) si farà sì che il kernel invii i
 corrispondenti segnali (rispettivamente \const{SIGTSTP}, \const{SIGINT},
 \const{SIGQUIT} e \const{SIGTERM}, trattati in sez.~\ref{sec:sig_job_control})
 a tutti i processi del raggruppamento di \textit{foreground}; in questo modo
 la shell può gestire il blocco e l'interruzione dei vari comandi.
+
+
 Per completare la trattazione delle caratteristiche del job control legate al
 terminale di controllo, occorre prendere in considerazione i vari casi legati
 alla terminazione anomala dei processi, che sono di norma gestite attraverso
 il segnale \const{SIGHUP}. Il nome del segnale deriva da \textit{hungup},
 termine che viene usato per indicare la condizione in cui il terminale diventa
-inutilizzabile, (letteralmente sarebbe \textsl{impiccagione}). 
+inutilizzabile, (letteralmente sarebbe \textsl{impiccagione}).
 
 Quando si verifica questa condizione, ad esempio se si interrompe la linea, o
 va giù la rete o più semplicemente si chiude forzatamente la finestra di
@@ -427,26 +435,28 @@ terminale, in assenza di un processo che sia in grado di effettuare il
 controllo dello stesso.
 
 Questa è la situazione in cui si ha quello che viene chiamato un
-\textit{orphaned process group}. Lo standard 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 \const{SIGHUP} e
-\const{SIGCONT}.
+\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 \const{SIGHUP} e \const{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 process group: per definizione quest'ultimo è sempre \textsl{orfano},
-dato che il padre del leader di sessione è fuori dalla stessa e il nuovo
-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 \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}.}
 
 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
@@ -487,7 +497,7 @@ Nella maggior parte delle distribuzioni di GNU/Linux\footnote{fa eccezione la
   distribuzione \textit{Slackware}, come alcune distribuzioni su dischetto, ed
   altre distribuzioni dedicate a compiti limitati e specifici.}  viene usata
 la procedura di avvio di System V; questa prevede che \cmd{init} legga dal
-file di configurazione \file{/etc/inittab} quali programmi devono essere
+file di configurazione \conffile{/etc/inittab} quali programmi devono essere
 lanciati, ed in quali modalità, a seconda del cosiddetto \textit{run level},
 anch'esso definito nello stesso file.
 
@@ -517,20 +527,21 @@ perci
 tutto ripetuto per ciascuno dei terminali che si hanno a disposizione (o per
 un certo numero di essi, nel caso delle console virtuali), secondo quanto
 indicato dall'amministratore nel file di configurazione del programma,
-\file{/etc/inittab}.
+\conffile{/etc/inittab}.
 
 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 process group, e di
-aprire il terminale (che così diventa il terminale di controllo della
-sessione) in lettura sullo standard input ed in scrittura sullo standard
-output e sullo standard error; inoltre effettuerà, qualora servano, ulteriori
-settaggi.\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
+\itindex{process~group} \textit{process group}, e di aprire il terminale (che
+così diventa il terminale di controllo della sessione) in lettura sullo
+standard input ed in scrittura sullo standard output e sullo 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{exevle}, passando come argomento la
@@ -561,7 +572,7 @@ Infine attraverso l'uso di \func{setuid}, \func{setgid} e \func{initgroups}
 verrà cambiata l'identità del proprietario del processo, infatti, come
 spiegato in sez.~\ref{sec:proc_setuid}, avendo invocato tali funzioni con i
 privilegi di amministratore, tutti gli user-ID ed i group-ID (reali, effettivi
-e salvati) saranno settati a quelli dell'utente.
+e salvati) saranno impostati a quelli dell'utente.
 
 A questo punto \cmd{login} provvederà (fatte salve eventuali altre azioni
 iniziali, come la stampa di messaggi di benvenuto o il controllo della posta)
@@ -574,7 +585,7 @@ in sez.~\ref{sec:sess_job_control_overview}.
 Dato che il processo padre resta sempre \cmd{init} quest'ultimo potrà
 provvedere, ricevendo un \const{SIGCHLD} all'uscita della shell quando la
 sessione di lavoro è terminata, a rilanciare \cmd{getty} sul terminale per
-ripetere da capo tutto il procedimento. 
+ripetere da capo tutto il procedimento.
 
 
 
@@ -590,9 +601,10 @@ niente a che fare con la gestione diretta dei comandi dell'utente.
 Questi programmi, che devono essere eseguiti in modalità non interattiva e
 senza nessun intervento dell'utente, sono normalmente chiamati
 \textsl{demoni}, (o \textit{daemons}), nome ispirato dagli omonimi spiritelli
-che svolgevano compiti vari, di cui parlava Socrate (che sosteneva di averne
-uno al suo servizio).\footnote{NdT. ricontrollare, i miei ricordi di filosofia
-  sono piuttosto datati.}
+della mitologia greca che svolgevano compiti che gli dei trovavano noiosi, di
+cui parla anche Socrate (che sosteneva di averne uno al suo servizio).
+
+%TODO ricontrollare, i miei ricordi di filosofia sono piuttosto datati.
 
 Se però si lancia un programma demone dalla riga di comando in un sistema che
 supporta, come Linux, il \textit{job control} esso verrà comunque associato ad
@@ -615,10 +627,10 @@ occorrer
 \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 \textit{process group leader}, (avrà il \acr{pgid} del
-  padre, ma un \acr{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 \itindex{process~group~leader} \textit{process group
+    leader}, (avrà il \acr{pgid} del padre, ma un \acr{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.
@@ -633,9 +645,9 @@ occorrer
   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 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 \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 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
@@ -682,14 +694,13 @@ standardizzata.
 Il servizio prevede vari meccanismi di notifica, e, come ogni altro servizio
 in un sistema unix-like, viene gestito attraverso un apposito programma,
 \cmd{syslogd}, che è anch'esso un \textsl{demone}. In generale i messaggi di
-errore vengono raccolti dal file speciale \file{/dev/log}, un
-\textit{socket}\index{socket} locale (vedi sez.~\ref{sec:sock_sa_local})
-dedicato a questo scopo, o via rete, con un \textit{socket} UDP, o da un
-apposito demone, \cmd{klogd}, che estrae i messaggi del kernel.\footnote{i
-  messaggi del kernel sono tenuti in un buffer circolare e scritti tramite la
-  funzione \func{printk}, analoga alla \func{printf} usata in user space; una
-  trattazione eccellente dell'argomento si trova in \cite{LinDevDri}, nel
-  quarto capitolo.}
+errore vengono raccolti dal file speciale \file{/dev/log}, un socket locale
+(vedi sez.~\ref{sec:sock_sa_local}) dedicato a questo scopo, o via rete, con
+un socket UDP, o da un apposito demone, \cmd{klogd}, che estrae i messaggi del
+kernel.\footnote{i messaggi del kernel sono tenuti in un buffer circolare e
+  scritti tramite la funzione \func{printk}, analoga alla \func{printf} usata
+  in user space; una trattazione eccellente dell'argomento si trova in
+  \cite{LinDevDri}, nel quarto capitolo.}
 
 Il servizio permette poi di trattare i vari messaggi classificandoli
 attraverso due indici; il primo, chiamato \textit{facility}, suddivide in
@@ -710,15 +721,15 @@ meccanismi come:
 \item scartare.
 \end{itemize*}
 secondo le modalità che questo preferisce e che possono essere impostate
-attraverso il file di configurazione \file{/etc/syslog.conf} (maggiori
+attraverso il file di configurazione \conffile{/etc/syslog.conf} (maggiori
 dettagli si possono trovare sulle pagine di manuale per questo file e per
 \cmd{syslogd}).
 
 Le \acr{glibc} definiscono 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\index{socket} UDP, o
-utilizzare le capacità di reinvio del servizio.
+funzionano solo localmente; se si vogliono inviare i messaggi ad un altro
+sistema occorre farlo esplicitamente con un socket UDP, o utilizzare le
+capacità di reinvio del servizio.
 
 La prima funzione definita dall'interfaccia è \funcd{openlog}, che apre una
 connessione al servizio di \textit{syslog}; essa in generale non è necessaria
@@ -757,23 +768,23 @@ specificato con un OR aritmetico.
     \hline
     \hline
     \const{LOG\_AUTH}     & Messaggi relativi ad autenticazione e sicurezza,
-                            obsoleto, è sostituito da \const{LOG\_AUTHPRIV}. \\
+                            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}      & Server FTP.\\
-    \const{LOG\_KERN}     & Messaggi del kernel\\
-    \const{LOG\_LOCAL0}   & Riservato all'amministratore per uso locale\\
+    \const{LOG\_KERN}     & Messaggi del kernel.\\
+    \const{LOG\_LOCAL0}   & Riservato all'amministratore per uso locale.\\
     --- & \\
-    \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\_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 
-                            (USENET) \\
-    \const{LOG\_SYSLOG}   & Messaggi generati dallo stesso \cmd{syslogd}\\
-    \const{LOG\_USER}     & Messaggi generici a livello utente\\
-    \const{LOG\_UUCP}     & Messaggi del sistema UUCP\\
+                            (USENET).\\
+    \const{LOG\_SYSLOG}   & Messaggi generati dallo stesso \cmd{syslogd}.\\
+    \const{LOG\_USER}     & Messaggi generici a livello utente.\\
+    \const{LOG\_UUCP}     & Messaggi del sistema UUCP.\\
 \hline
 \end{tabular}
 \caption{Valori possibili per l'argomento \param{facility} di \func{openlog}.}
@@ -798,10 +809,10 @@ tab.~\ref{tab:sess_openlog_option}.
 \const{LOG\_NDELAY} & Sostituisce \const{LOG\_AUTH}.\\
 \const{LOG\_NOWAIT} & Messaggi dei demoni di gestione dei comandi
                       programmati (\cmd{cron} e \cmd{at}).\\
-\const{LOG\_ODELAY} & .\\
+\const{LOG\_ODELAY} & \\
 \const{LOG\_PERROR} & Stampa anche su \file{stderr}.\\
 \const{LOG\_PID}    & Inserisce nei messaggi il \acr{pid} del processo
-                      chiamante. \\
+                      chiamante.\\
 \hline
 \end{tabular}
 \caption{Valori possibili per l'argomento \param{option} di \func{openlog}.}
@@ -830,7 +841,7 @@ devono essere forniti secondo quanto richiesto da \param{format}.
 
 L'argomento \param{priority} permette di impostare sia la \textit{facility}
 che la \textit{priority} del messaggio. In realtà viene prevalentemente usato
-per specificare solo quest'ultima in quanto la prima viene di norma
+per specificare solo quest'ultima in quanto la prima viene di norma 
 preimpostata con \func{openlog}. La priorità è indicata con un valore
 numerico\footnote{le \acr{glibc}, seguendo POSIX.1-2001, prevedono otto
   diverse priorità ordinate da 0 a 7, in ordine di importanza decrescente;
@@ -850,14 +861,14 @@ con la maschera binaria delle costanti di tab.~\ref{tab:sess_syslog_facility}.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{LOG\_EMERG}   & Il sistema è inutilizzabile. \\
+    \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\_INFO}    & Messaggio informativo.\\
     \const{LOG\_DEBUG}   & Messaggio di debug.\\
     \hline
   \end{tabular}
@@ -875,10 +886,10 @@ Imposta la maschera dei log al valore specificato.
 \bodydesc{La funzione restituisce il precedente valore.}
 \end{prototype}
 
-Le routine di gestione mantengono per ogni processo una maschera che determina
+Le funzioni di gestione mantengono per ogni processo una maschera che determina
 quale delle chiamate effettuate a \func{syslog} verrà effettivamente
 registrata. La registrazione viene disabilitata per tutte quelle priorità che
-non rientrano nella maschera; questa viene settata usando la macro
+non rientrano nella maschera; questa viene impostata usando la macro
 \macro{LOG\_MASK(p)} dove \code{p} è una delle costanti di
 tab.~\ref{tab:sess_syslog_priority}. É inoltre disponibile anche la macro
 \macro{LOG\_UPTO(p)} che permette di specificare automaticamente tutte le
@@ -980,7 +991,7 @@ massime vengono persi; in alcuni casi il driver provvede ad inviare
 automaticamente un avviso (un carattere di BELL, che provoca un beep)
 sull'output quando si eccedono le dimensioni della coda.  Se è abilitato il
 modo canonico i caratteri in ingresso restano nella coda fintanto che non
-viene ricevuto un a capo; un'altro parametro del sistema, \const{MAX\_CANON},
+viene ricevuto un a capo; un altro parametro del sistema, \const{MAX\_CANON},
 specifica la dimensione massima di una riga in modo canonico.
 
 La coda di uscita è analoga a quella di ingresso e contiene i caratteri
@@ -1038,18 +1049,18 @@ prototipo 
     \textit{pathname} del terminale.}
 \end{prototype}
 
-La funzione scrive il \index{\textit{pathname}}\textit{pathname} del terminale
-di controllo del processo chiamante nella stringa posta all'indirizzo
-specificato dall'argomento \param{s}.  La memoria per contenere la stringa
-deve essere stata allocata in precedenza ed essere lunga almeno
+La funzione scrive il \itindex{pathname} \textit{pathname} del terminale di
+controllo del processo chiamante nella stringa posta all'indirizzo specificato
+dall'argomento \param{s}.  La memoria per contenere la stringa deve essere
+stata allocata in precedenza ed essere lunga almeno
 \const{L\_ctermid}\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 di un terminale.} caratteri.
 
-Esiste infine una versione rientrante \funcd{ttyname\_r} della funzione
-\func{ttyname}, che non presenta il problema dell'uso di una zona di memoria
-statica; il suo prototipo è:
+Esiste infine una versione \index{funzioni!rientranti} rientrante
+\funcd{ttyname\_r} della funzione \func{ttyname}, che non presenta il problema
+dell'uso di una zona di memoria statica; il suo prototipo è:
 \begin{prototype}{unistd.h}{int ttyname\_r(int desc, char *buff, size\_t len)}
   
   Restituisce il nome del terminale associato al file \param{desc}.
@@ -1072,7 +1083,7 @@ si avr
 
 Se si passa come argomento \val{NULL} la funzione restituisce il puntatore ad
 una stringa statica che può essere sovrascritta da chiamate successive. Si
-tenga presente che il \index{\textit{pathname}}\textit{pathname} restituito
+tenga presente che il \itindex{pathname} \textit{pathname} restituito
 potrebbe non identificare univocamente il terminale (ad esempio potrebbe
 essere \file{/dev/tty}), inoltre non è detto che il processo possa
 effettivamente aprire il terminale.
@@ -1088,6 +1099,7 @@ ulteriori informazioni.\footnote{la definizione della struttura si trova in
   l'esempio di BSD, aggiunge i due campi \var{c\_ispeed} e \var{c\_ospeed} per
   mantenere le velocità delle linee seriali, ed un campo ulteriore,
   \var{c\_line} per ... (NdT, trovare a che serve).}
+% TODO trovare a che serve
 
 \begin{figure}[!htb] 
   \footnotesize \centering
@@ -1109,7 +1121,7 @@ modificare i bit su cui non si interviene.
 \begin{table}[b!ht]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|p{11cm}|}
+  \begin{tabular}[c]{|l|p{10cm}|}
     \hline
     \textbf{Valore}& \textbf{Significato}\\
     \hline
@@ -1127,7 +1139,7 @@ modificare i bit su cui non si interviene.
                      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 è settato, per evitare ambiguità esso viene sempre
+                     non è impostato, per evitare ambiguità esso viene sempre
                      riportato come \texttt{0xFF 0xFF}.\\
     \const{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette
                      bit mettendo a zero il bit più significativo, altrimenti 
@@ -1135,7 +1147,7 @@ modificare i bit su cui non si interviene.
     \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. \\
+                     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, 
@@ -1143,18 +1155,18 @@ modificare i bit su cui non si interviene.
                      gruppo in foreground anche l'invio di \const{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 settato \const{PARMRK}
+                     NUL, a meno che non sia impostato \const{PARMRK}
                      nel qual caso viene letto come la sequenza di caratteri
                      \texttt{0xFF 0x00 0x00}.\\
     \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'|).  \\
+                     (\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. \\
+                     input.\\
     \const{INLCR}  & Se impostato il carattere di a capo
                      (\verb|'\n'|) viene automaticamente trasformato in un
                      ritorno carrello (\verb|'\r'|).\\
@@ -1174,11 +1186,11 @@ modificare i bit su cui non si interviene.
     \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. \\
+                     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 settato (è una estensione
-                     BSD). \\
+                     comporta cose se fosse sempre impostato (è una estensione
+                     BSD).\\
     \hline
   \end{tabular}
   \caption{Costanti identificative dei vari bit del flag di controllo
@@ -1202,7 +1214,7 @@ pseudo-terminali usati nelle connessioni di rete.
 \begin{table}[htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|p{11cm}|}
+  \begin{tabular}[c]{|l|p{10cm}|}
     \hline
     \textbf{Valore}& \textbf{Significato}\\
     \hline
@@ -1282,7 +1294,7 @@ valore.
 \begin{table}[htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|p{11cm}|}
+  \begin{tabular}[c]{|l|p{10cm}|}
     \hline
     \textbf{Valore}& \textbf{Significato}\\
     \hline
@@ -1293,11 +1305,11 @@ valore.
                      \func{open} senza aver specificato il flag di
                      \const{O\_NOBLOCK} si bloccherà il processo finché 
                      non si è stabilita una connessione con il modem; inoltre 
-                     se viene rilevata una disconessione viene inviato un
-                     \const{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}. \\
+                     se viene rilevata una disconnessione viene inviato un
+                     segnale di \const{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{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.\\
@@ -1310,27 +1322,26 @@ valore.
                      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.\\
+                     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{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}
+                     possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8}
                      corrispondenti ad un analogo numero di bit.\\
     \const{CBAUD}  & Maschera dei bit (4+1) usati per impostare della velocità
-                     della linea (il \textit{baud rate}) in ingresso
-                     In Linux non è implementato in quanto viene 
-                     usato un apposito campo di \struct{termios}.\\
+                     della linea (il \textit{baud rate}) in ingresso; 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, per le stesse motivazioni del precedente non è
                      implementato in Linux.\\
     \const{CIBAUD} & Maschera dei bit della velocità della linea in
-                     ingresso. Analogo a \const{CBAUD}, anch'esso in Linux è
-                     mantenuto in un apposito campo di \struct{termios}. \\
+                     ingresso; analogo a \const{CBAUD}, anch'esso in Linux è
+                     mantenuto in un apposito campo di \struct{termios}.\\
     \const{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
                      attraverso l'utilizzo delle dei due fili di RTS e CTS.\\
     \hline
@@ -1342,11 +1353,11 @@ valore.
 
 Il terzo flag, mantenuto nel campo \var{c\_cflag}, è detto \textsl{flag di
   controllo} ed è legato al funzionamento delle linee seriali, permettendo di
-impostarne varie caratteristiche, come il numero di bit di stop, i settaggi
-della parità, il funzionamento del controllo di flusso; esso ha senso solo per
-i terminali connessi a linee seriali. Un elenco dei vari bit, del loro
-significato e delle costanti utilizzate per identificarli è riportato in
-tab.~\ref{tab:sess_termios_cflag}.
+impostarne varie caratteristiche, come il numero di bit di stop, le
+impostazioni della parità, il funzionamento del controllo di flusso; esso ha
+senso solo per i terminali connessi a linee seriali. Un elenco dei vari bit,
+del loro significato e delle costanti utilizzate per identificarli è riportato
+in tab.~\ref{tab:sess_termios_cflag}.
 
 I valori di questo flag sono molto specifici, e completamente indirizzati al
 controllo di un terminale mantenuto su una linea seriale; essi pertanto non
@@ -1364,7 +1375,7 @@ fig.~\ref{fig:term_termios}).
 \begin{table}[b!ht]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|p{11cm}|}
+  \begin{tabular}[c]{|l|p{10cm}|}
     \hline
     \textbf{Valore}& \textbf{Significato}\\
     \hline
@@ -1378,30 +1389,30 @@ fig.~\ref{fig:term_termios}).
                      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). \\
+                     l'uscita su una stampante).\\
     \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 \verb|\| seguito dal carattere
-                     cancellato, e così via in caso di successive
+                     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{/}.\\
+                     normali prima verrà stampata una ``\texttt{/}''.\\
     \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. \\
+                     cancellato.\\
     \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}.\\
     \const{ECHONL} & Se impostato viene effettuato l'eco di un a
                      capo (\verb|\n|) anche se non è stato impostato
-                     \const{ECHO}. \\
+                     \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 prepende un \verb|^| alla
-                     lettera ottenuta sommando \texttt{0x40} al valore del
+                     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).\\
@@ -1410,19 +1421,19 @@ fig.~\ref{fig:term_termios}).
     \const{IEXTEN} & Abilita alcune estensioni previste dalla
                      implementazione. Deve essere impostato perché caratteri
                      speciali come EOL2, LNEXT, REPRINT e WERASE possano
-                     essere interpretati. \\
+                     essere interpretati.\\
     \const{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
                      e uscita quando vengono emessi i segnali \const{SIGINT}, 
-                     \const{SIGQUIT} and \const{SIGSUSP}.\\
+                     \const{SIGQUIT} e \const{SIGSUSP}.\\
     \const{TOSTOP} & Se abilitato, con il supporto per il job control presente,
                      genera il segnale \const{SIGTTOU} per un processo in
                      background che cerca di scrivere sul terminale.\\
-    \const{XCASE}  & Se settato il terminale funziona solo con le
+    \const{XCASE}  & Se impostato il terminale funziona solo con le
                      maiuscole. L'input è convertito in minuscole tranne per i
-                     caratteri preceduti da una \verb|\|. In output le
-                     maiuscole sono precedute da una \verb|\| e le minuscole
-                     convertite in maiuscole.\\
-    \const{DEFECHO}& Se impostate effettua l'eco solo se c'è un processo in
+                     caratteri preceduti da una ``\texttt{\bslash}''. In output
+                     le maiuscole sono precedute da una ``\texttt{\bslash}'' e 
+                     le minuscole convertite in maiuscole.\\
+    \const{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in
                      lettura.\\
     \const{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
                      attivato dal carattere DISCARD. Non è supportato in
@@ -1465,23 +1476,23 @@ altri.\footnote{in Linux il valore della costante 
 \begin{table}[htb]
   \footnotesize
   \centering
-  \begin{tabular}[c]{|l|c|c|p{8cm}|}
+  \begin{tabular}[c]{|l|c|c|p{7cm}|}
     \hline
     \textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\
     \hline
     \hline
-    \const{VINTR}   &\texttt{0x03}&(\verb|C-c|)& Carattere di interrupt, 
+    \const{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt, 
                                                  provoca l'emissione di 
-                                                 \const{SIGINT}. \\
-    \const{VQUIT}   &\texttt{0x1C}&(\verb|C-\|)& Carattere di uscita provoca 
+                                                 \const{SIGINT}.\\
+    \const{VQUIT} &\texttt{0x1C}&(\texttt{C-|})& Carattere di uscita provoca 
                                                  l'emissione di 
                                                  \const{SIGQUIT}.\\
-    \const{VERASE}  &\texttt{0x7f}& DEL &  Carattere di ERASE, cancella
-                                           l'ultimo carattere precedente 
-                                           nella linea.\\
-    \const{VKILL}   &\texttt{0x15}&(\verb|C-u|)& Carattere di KILL, cancella
+    \const{VERASE}&\texttt{0x7f}&  DEL         & 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}&(\verb|C-d|)& Carattere di
+    \const{VEOF}  &\texttt{0x04}&(\texttt{C-d})& Carattere di
                                                  \textit{end-of-file}. Causa
                                                  l'invio del contenuto del
                                                  buffer di ingresso al
@@ -1493,38 +1504,39 @@ altri.\footnote{in Linux il valore della costante 
                                                  zero caratteri, cioè la
                                                  condizione di
                                                  \textit{end-of-file}.\\
-    \const{VTIME}   &   ---       & --- & Timeout, in decimi di secondo, per
-                                          una lettura in modo non canonico. \\
-    \const{VMIN}    &   ---       & --- & Numero minimo di caratteri per una 
-                                          lettura in modo non canonico.\\
-    \const{VSWTC}   &\texttt{0x00}& NUL & Carattere di switch. Non supportato
-                                          in Linux.\\
-    \const{VSTART}  &\texttt{0x21}&(\verb|C-q|)& Carattere di START. Riavvia un
+    \const{VTIME} &     ---     &  ---   & Timeout, in decimi di secondo, per
+                                           una lettura in modo non canonico.\\
+    \const{VMIN}  &     ---     &  ---   & Numero minimo di caratteri per una 
+                                           lettura in modo non canonico.\\
+    \const{VSWTC} &\texttt{0x00}&   NUL  & Carattere di switch. Non supportato
+                                           in Linux.\\
+    \const{VSTART}&\texttt{0x21}&(\texttt{C-q})& Carattere di START. Riavvia un
                                                  output bloccato da uno STOP.\\
-    \const{VSTOP}   &\texttt{0x23}&(\verb|C-s|)& Carattere di STOP. Blocca
+    \const{VSTOP} &\texttt{0x23}&(\texttt{C-s})& Carattere di STOP. Blocca
                                                  l'output fintanto che non
                                                  viene premuto un carattere di
                                                  START.\\
-    \const{VSUSP}   &\texttt{0x1A}&(\verb|C-z|)& Carattere di
+    \const{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di
                                                  sospensione. Invia il segnale
                                                  \const{SIGTSTP}.\\
-    \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{VREPRINT}&\texttt{0x12}&(\verb|C-r|)& Ristampa i caratteri non
-                                                 ancora letti.  \\
-    \const{VDISCARD}&\texttt{0x07}&(\verb|C-o|)& Non riconosciuto in Linux. \\
-    \const{VWERASE} &\texttt{0x17}&(\verb|C-w|)& Cancellazione di una parola.\\
-    \const{VLNEXT}  &\texttt{0x16}&(\verb|C-v|)& Carattere di escape, serve a
+    \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{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non
+                                                 ancora letti.\\
+    \const{VDISCARD}&\texttt{0x07}&(\texttt{C-o})& Non riconosciuto in Linux.\\
+    \const{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una
+                                                 parola.\\
+    \const{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{VEOL2}   &\texttt{0x00}& NUL & Ulteriore carattere di fine
-                                          riga. Ha lo stesso effetto di
-                                          \const{VEOL} ma può essere un
-                                          carattere diverso. \\
+                                                 direttamente all'output.\\
+    \const{VEOL2} &\texttt{0x00}&   NUL  & Ulteriore carattere di fine
+                                           riga. Ha lo stesso effetto di
+                                           \const{VEOL} ma può essere un
+                                           carattere diverso. \\
     \hline
   \end{tabular}
   \caption{Valori dei caratteri di controllo mantenuti nel campo \var{c\_cc}
@@ -1547,10 +1559,10 @@ codice del tipo:
 La maggior parte di questi caratteri (tutti tranne \const{VTIME} e
 \const{VMIN}) hanno effetto solo quando il terminale viene utilizzato in modo
 canonico; per alcuni devono essere soddisfatte ulteriori richieste, ad esempio
-\const{VINTR}, \const{VSUSP}, e \const{VQUIT} richiedono sia settato
-\const{ISIG}; \const{VSTART} e \const{VSTOP} richiedono sia settato
+\const{VINTR}, \const{VSUSP}, e \const{VQUIT} richiedono sia impostato
+\const{ISIG}; \const{VSTART} e \const{VSTOP} richiedono sia impostato
 \const{IXON}; \const{VLNEXT}, \const{VWERASE}, \const{VREPRINT} richiedono sia
-settato \const{IEXTEN}.  In ogni caso quando vengono attivati i caratteri
+impostato \const{IEXTEN}.  In ogni caso quando vengono attivati i caratteri
 vengono interpretati e non sono passati sulla coda di ingresso.
 
 Per leggere ed scrivere tutte le varie impostazioni dei terminali viste finora
@@ -1571,7 +1583,7 @@ immagazzinate le impostazioni.  Le funzioni sono \funcd{tcgetattr} e
   \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
     caso di errore, nel qual caso \var{errno} assumerà i valori:
     \begin{errlist}
-    \item[\errcode{EINTR}] La funzione è stata interrotta. 
+    \item[\errcode{EINTR}] la funzione è stata interrotta. 
     \end{errlist}
     ed inoltre \errval{EBADF}, \errval{ENOTTY} ed \errval{EINVAL}. 
   }
@@ -1617,9 +1629,9 @@ utili qualora si cambino i parametri di output.
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{TCSANOW}  & Esegue i cambiamenti in maniera immediata. \\
+    \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. \\
+                       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.\\
     \hline
@@ -1722,20 +1734,15 @@ altre versioni di librerie 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}
-     B0       B50      B75      
-     B110     B134     B150
-     B200     B300     B600
-     B1200    B1800    B2400
-     B4800    B9600    B19200
-     B38400   B57600   B115200   
-     B230400  B460800
+     B0       B50      B75      B110     B134     B150     B200     
+     B300     B600     B1200    B1800    B2400    B4800    B9600    
+     B19200   B38400   B57600   B115200  B230400  B460800
 \end{verbatim}
 
 Un terminale può utilizzare solo alcune delle velocità possibili, le funzioni
 però non controllano se il valore specificato è valido, dato che non possono
 sapere a quale terminale le velocità saranno applicate; sarà l'esecuzione di
 \func{tcsetattr} a fallire quando si cercherà di eseguire l'impostazione.
-
 Di norma il valore ha senso solo per i terminali seriali dove indica appunto
 la velocità della linea di trasmissione; se questa non corrisponde a quella
 del terminale quest'ultimo non potrà funzionare: quando il terminale non è
@@ -1778,7 +1785,6 @@ i terminali hanno un insieme di funzionalit
 di code di ingresso ed uscita; in generale si fa riferimento ad esse con il
 nome di \textsl{discipline di linea}.
 
-
 Lo standard POSIX prevede alcune funzioni che permettono di intervenire
 direttamente sulla gestione di quest'ultime e sull'interazione fra i dati in
 ingresso ed uscita e le relative code. In generale tutte queste funzioni
@@ -1808,9 +1814,9 @@ La funzione invia un flusso di bit nulli (che genera una condizione di break)
 sul terminale associato a \param{fd}; un valore nullo di \param{duration}
 implica una durata del flusso fra 0.25 e 0.5 secondi, un valore diverso da
 zero implica una durata pari a \code{duration*T} dove \code{T} è un valore
-compreso fra 0.25 e 0.5.\footnote{POSIX specifica il comportamento solo nel
-  caso si sia impostato un valore nullo per \param{duration}; il comportamento
-  negli altri casi può dipendere dalla implementazione.}
+compreso fra 0.25 e 0.5.\footnote{lo standard POSIX specifica il comportamento
+  solo nel caso si sia impostato un valore nullo per \param{duration}; il
+  comportamento negli altri casi può dipendere dalla implementazione.}
 
 Le altre funzioni previste da POSIX servono a controllare il comportamento
 dell'interazione fra le code associate al terminale e l'utente; la prima è
@@ -1861,7 +1867,7 @@ di uscita canceller
     \textbf{Valore}& \textbf{Significato}\\
     \hline
     \hline
-    \const{TCIFLUSH} & Cancella i dati sulla coda di ingresso. \\
+    \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.\\
     \hline
@@ -1905,7 +1911,7 @@ riportati in tab.~\ref{tab:sess_tcflow_action}.
     \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.  \\
+                    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.\\
     \hline
@@ -1916,6 +1922,7 @@ riportati in tab.~\ref{tab:sess_tcflow_action}.
 \end{table}
 
 
+
 \subsection{Operare in \textsl{modo non canonico}}
 \label{sec:term_non_canonical}
 
@@ -1968,27 +1975,78 @@ distinti:
 \end{description}
 
 
-%
-% Qui c'è da mettere tutta la parte sui terminali virtuali, e la gestione
-% degli stessi
-%
 
 \section{La gestione dei terminali virtuali}
 \label{sec:sess_virtual_terminal}
 
+% 
+% TODO terminali virtuali 
+% Qui c'è da mettere tutta la parte sui terminali virtuali, e la gestione
+% degli stessi
+%
+
 Da fare.
 
 \subsection{I terminali virtuali}
 \label{sec:sess_pty}
 
 Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia.
+% vedi man pts
+
 
-\subsection{La funzione \func{openpty}}
+\subsection{Allocazione dei terminale virtuali}
 \label{sec:sess_openpty}
 
 Qui vanno le cose su \func{openpty} e compagnia.
 
+% TODO le ioctl dei terminali
+% TODO trattare \func{posix\_openpt}
+
+
+
+% TODO materiale sulle seriali
+% vedi http://www.easysw.com/~mike/serial/serial.html
+% TODO materiale generico sul layer TTY
+% vedi http://www.linusakesson.net/programming/tty/index.php
+
+
+% LocalWords:  kernel multitasking dell'I job control BSD POSIX shell sez group
+% LocalWords:  foreground process bg fg Di waitpid WUNTRACED pgrp session sched
+% LocalWords:  struct pgid sid pid ps getpgid getpgrp SVr unistd void errno int
+% LocalWords:  ESRCH getsid glibc system call XOPEN SOURCE EPERM setpgrp EACCES
+% LocalWords:  setpgid exec EINVAL did fork race condition setsid l'I tty ioctl
+% LocalWords:  NOCTTY TIOCSCTTY error tcsetpgrp termios fd pgrpid descriptor VT
+% LocalWords:  ENOTTY ENOSYS EBADF SIGTTIN SIGTTOU EIO tcgetpgrp crypt SIGTSTP
+% LocalWords:  SIGINT SIGQUIT SIGTERM SIGHUP hungup kill orphaned SIGCONT exit
+% LocalWords:  init Slackware run level inittab fig device getty exevle TERM at
+% LocalWords:  getpwnam chdir home chown chmod setuid setgid initgroups SIGCHLD
+% LocalWords:  daemon like daemons NdT Stevens Programming FAQ filesystem umask
+% LocalWords:  noclose syslog syslogd socket UDP klogd printk printf facility
+% LocalWords:  priority log openlog const char ident option argv tab AUTH CRON
+% LocalWords:  AUTHPRIV cron FTP KERN LOCAL LPR NEWS news USENET UUCP CONS CRIT
+% LocalWords:  NDELAY NOWAIT ODELAY PERROR stderr format strerror EMERG ALERT
+% LocalWords:  ERR WARNING NOTICE INFO DEBUG debug setlogmask mask UPTO za ssh
+% LocalWords:  teletype telnet read write BELL beep CANON isatty desc ttyname
+% LocalWords:  NULL ctermid stdio pathname buff size len ERANGE bits ispeed xFF
+% LocalWords:  ospeed line tcflag INPCK IGNPAR PARMRK ISTRIP IGNBRK BREAK NUL
+% LocalWords:  BRKINT IGNCR carriage return newline ICRNL INLCR IUCLC IXON NL
+% LocalWords:  IXANY IXOFF IMAXBEL iflag OPOST CR OCRNL OLCUC ONLCR ONOCR OFILL
+% LocalWords:  ONLRET OFDEL NLDLY CRDLY TABDLY BSDLY backspace BS VTDLY FFDLY
+% LocalWords:  form feed FF oflag CLOCAL NOBLOCK of HUPCL CREAD CSTOPB PARENB
+% LocalWords:  PARODD CSIZE CS CBAUD CBAUDEX CIBAUD CRTSCTS RTS CTS cflag ECHO
+% LocalWords:  ICANON ECHOE ERASE ECHOPRT ECHOK ECHOKE ECHONL ECHOCTL ctrl ISIG
+% LocalWords:  INTR QUIT SUSP IEXTEN EOL LNEXT REPRINT WERASE NOFLSH and TOSTOP
+% LocalWords:  SIGSUSP XCASE DEFECHO FLUSHO DISCARD PENDIN lflag NCCS VINTR EOF
+% LocalWords:  interrupt VQUIT VERASE VKILL VEOF VTIME VMIN VSWTC switch VSTART
+% LocalWords:  VSTOP VSUSP VEOL VREPRINT VDISCARD VWERASE VLNEXT escape actions
+% LocalWords:  tcgetattr tcsetattr EINTR TCSANOW TCSADRAIN TCSAFLUSH speed MIN
+% LocalWords:  SetTermAttr UnSetTermAttr cfsetispeed cfsetospeed cfgetispeed
+% LocalWords:  cfgetospeed quest'ultime tcsendbreak duration break tcdrain
+% LocalWords:  tcflush queue TCIFLUSH TCOFLUSH TCIOFLUSH tcflow action TCOOFF
+% LocalWords:  TCOON TCIOFF TCION timer openpty Window nochdir
+
+
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
-%%% End: 
+%%% End: 
\ No newline at end of file