+\subsection{Operare in \textsl{modo non canonico}}
+\label{sec:term_non_canonical}
+
+Operare con un terminale in modo canonico è relativamente semplice; basta
+eseguire una lettura e la funzione ritornerà quando una il driver del
+terminale avrà completato una linea di input. Non è detto che la linea sia
+letta interamente (si può aver richiesto un numero inferiore di byte) ma in
+ogni caso nessun dato verrà perso, e il resto della linea sarà letto alla
+chiamata successiva.
+
+Inoltre in modo canonico la gestione dell'input è di norma eseguita
+direttamente dal driver del terminale, che si incarica (a seconda di quanto
+impostato con le funzioni viste nei paragrafi precedenti) di cancellare i
+caratteri, bloccare e riavviare il flusso dei dati, terminare la linea quando
+viene ricevuti uno dei vari caratteri di terminazione (NL, EOL, EOL2, EOF).
+
+In modo non canonico tocca invece al programma gestire tutto quanto, i
+caratteri NL, EOL, EOL2, EOF, ERASE, KILL, CR, REPRINT non vengono
+interpretati automaticamente ed inoltre, non dividendo più l'input in linee,
+il sistema non ha più un limite definito per quando ritornare i dati ad un
+processo. Per questo motivo abbiamo visto che in \var{c\_cc} sono previsti due
+caratteri speciali, MIN e TIME (specificati dagli indici \const{VMIN} e
+\const{VTIME} in \var{c\_cc}) che dicono al sistema di ritornare da una
+\func{read} quando è stata letta una determinata quantità di dati o è passato
+un certo tempo.
+
+Come accennato nella relativa spiegazione in tab.~\ref{tab:sess_termios_cc},
+TIME e MIN non sono in realtà caratteri ma valori numerici. Il comportamento
+del sistema per un terminale in modalità non canonica prevede quattro casi
+distinti:
+\begin{description}
+\item[MIN$>0$, TIME$>0$] In questo caso MIN stabilisce il numero minimo di
+ caratteri desiderati e TIME un tempo di attesa, in decimi di secondo, fra un
+ carattere e l'altro. Una \func{read} ritorna se vengono ricevuti almeno MIN
+ caratteri prima della scadenza di TIME (MIN è solo un limite inferiore, se
+ la funzione ha richiesto un numero maggiore di caratteri ne possono essere
+ restituiti di più); se invece TIME scade vengono restituiti i byte ricevuti
+ fino ad allora (un carattere viene sempre letto, dato che il timer inizia a
+ scorrere solo dopo la ricezione del primo carattere).
+\item[MIN$>0$, TIME$=0$] Una \func{read} ritorna solo dopo che sono stati
+ ricevuti almeno MIN caratteri. Questo significa che una \func{read} può
+ bloccarsi indefinitamente.
+\item[MIN$=0$, TIME$>0$] In questo caso TIME indica un tempo di attesa dalla
+ chiamata di \func{read}, la funzione ritorna non appena viene ricevuto un
+ carattere o scade il tempo. Si noti che è possibile che \func{read} ritorni
+ con un valore nullo.
+\item[MIN$=0$, TIME$=0$] In questo caso una \func{read} ritorna immediatamente
+ restituendo tutti i caratteri ricevuti. Anche in questo caso può ritornare
+ con un valore nullo.
+\end{description}
+
+
+
+\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{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
+
+
+% 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