X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=0cb02ef4de4ddb3bf48289912d0a2f5d3e28a136;hp=fdb7683579fc45b18e0a0187a58c451d26f82d87;hb=4e1da5b259a86278710be32441de7b88b9287ec1;hpb=607fcef8aad9ec8be0a80cc4c069c92902455f90 diff --git a/session.tex b/session.tex index fdb7683..0cb02ef 100644 --- a/session.tex +++ b/session.tex @@ -534,9 +534,8 @@ comunque viene sempre fatto è di eseguire almeno una istanza di un programma 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} @@ -994,7 +993,7 @@ sono riportati in fig.~\ref{fig:printk_priority} \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/printk_prio.c} \end{minipage} \normalsize @@ -1256,7 +1255,7 @@ bufferizzazione all'interno del kernel.\footnote{completamente indipendente 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} @@ -1399,7 +1398,7 @@ ne aggiungono degli altri per mantenere ulteriori informazioni.\footnote{la \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\textwidth} \includestruct{listati/termios.h} \end{minipage} \normalsize @@ -1976,9 +1975,9 @@ se soltanto uno dei cambiamenti richiesti è stato eseguito. Pertanto se si 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 @@ -2009,9 +2008,9 @@ infine si scrive il nuovo valore modificato con \func{tcsetattr} (\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 @@ -2083,6 +2082,22 @@ 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 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: @@ -2104,6 +2119,25 @@ linea da una struttura, il cui indirizzo è specificato dall'argomento \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.}