che permetta l'accesso ad un terminale. Uno schema di massima della procedura
è riportato in fig.~\ref{fig:sess_term_login}.
-\begin{figure}[htb]
- \centering
- \includegraphics[width=13cm]{img/tty_login}
+\begin{figure}[!htb]
+ \centering \includegraphics[width=13cm]{img/tty_login}
\caption{Schema della procedura di login su un terminale.}
\label{fig:sess_term_login}
\end{figure}
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/printk_prio.c}
\end{minipage}
\normalsize
dalla eventuale ulteriore bufferizzazione fornita dall'interfaccia standard
dei file.}
-\begin{figure}[htb]
+\begin{figure}[!htb]
\centering \includegraphics[width=14.5cm]{img/term_struct}
\caption{Struttura interna generica di un driver per un terminale.}
\label{fig:term_struct}
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/termios.h}
\end{minipage}
\normalsize
effettuano più cambiamenti è buona norma controllare con una ulteriore
chiamata a \func{tcgetattr} che essi siano stati eseguiti tutti quanti.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/SetTermAttr.c}
\end{minipage}
\normalsize
(\texttt{\small 13}), notificando un eventuale errore (\texttt{\small 14-15})
o uscendo normalmente.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/UnSetTermAttr.c}
\end{minipage}
\normalsize
l'effetto sarà quello di rendere la sua velocità identica a quella della linea
di output.
+Dato che in genere si imposta sempre la stessa velocità sulle linee di uscita
+e di ingresso è supportata anche la funzione \funcd{cfsetspeed}, una
+estensione di BSD,\footnote{la funzione origina da 4.4BSD e richiede sua
+ definita la macro \macro{\_BSD\_SOURCE}.} il cui prototipo è:
+\begin{functions}
+ \headdecl{unistd.h}
+ \headdecl{termios.h}
+ \funcdecl{int cfsetspeed(struct termios *termios\_p, speed\_t speed)}
+ Imposta la velocità delle linee seriali.
+
+ \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+ errore, che avviene solo quando il valore specificato non è valido.}
+\end{functions}
+\noindent la funzione è identica alle due precedenti ma imposta la stessa
+velocità sia per la linea di ingresso che per quella di uscita.
+
Analogamente a quanto avviene per l'impostazione, le velocità possono essere
lette da una struttura \struct{termios} utilizzando altre due funzioni,
\funcd{cfgetispeed} e \funcd{cfgetospeed}, i cui prototipi sono:
\param{termios\_p} che deve essere stata letta in precedenza con
\func{tcgetattr}.
+Infine sempre da BSD è stata ripresa una funzione che consente di impostare il
+teminale in una modalità analoga all cosiddetta modalità ``\textit{raw}'' di
+System V, in cui i dati in input vengono resi disponibili un carattere alla
+volta, e l'echo e tutte le interpretazioni dei caratteri in entrata e uscita
+sono disabilitate. La funzione è \funcd{cfmakeraw} ed il suo prototipo è:
+\begin{functions}
+ \headdecl{unistd.h}
+ \headdecl{termios.h}
+ \funcdecl{void cfmakeraw(struct termios *termios\_p)}
+ Importa il terminale in modalità ``\textit{raw}'' alla System V.
+
+ \bodydesc{La funzione imposta solo i valori in \param{termios\_p}, e non
+ sono previste condizioni di errore.}
+\end{functions}
+
+Anche in questo caso la funzione si limita a preparare i valori che poi
+saranno impostato con una successiva chiamata a \func{tcsetattr}, in sostanza
+la funzione è equivalente a:
+\includecodesnip{listati/cfmakeraw.c}
\subsection{La gestione della disciplina di linea.}