From: Simone Piccardi Date: Wed, 9 Oct 2002 22:36:29 +0000 (+0000) Subject: Caratteri di controllo X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=d46995abfd6f4e2fcd46cdb8ba369dbb6ba36492 Caratteri di controllo --- diff --git a/session.tex b/session.tex index 6424af1..80e7339 100644 --- a/session.tex +++ b/session.tex @@ -1222,11 +1222,14 @@ Si tenga presente inoltre che nel caso delle maschere il valore da inserire in della maschera, i valori da immettere infatti (quelli riportati nella spiegazione corrispondente) sono numerici e non per bit, per cui possono sovrapporsi fra di loro. Occorrerà perciò utilizzare un codice del tipo: -\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} + +\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}% c_oflag &= (~CRDLY); c_oflag |= CR1; \end{lstlisting} -che prima cancella i bit della maschera in questione e poi setta il valore. + +\noindent che prima cancella i bit della maschera in questione e poi setta il +valore. \begin{table}[htb] @@ -1443,7 +1446,7 @@ trovato nel file \file{SetTermAttr.c} dei sorgenti allegati. \begin{figure}[!htb] \footnotesize - \begin{lstlisting}{} + \begin{lstlisting}{}% #include #include #include @@ -1484,7 +1487,7 @@ int UnSetTermAttr(int fd, tcflag_t flag) } return 0; } - \end{lstlisting} + \end{lstlisting} \caption{Codice delle funzioni \func{SetTermAttr} e \func{UnSetTermAttr} per impostare o rimuovere uno dei flag di controllo locale del terminale.} \label{fig:term_set_attr} @@ -1513,7 +1516,7 @@ qualora si cambino i parametri di output. \begin{table}[htb] \footnotesize \centering - \begin{tabular}[c]{|l|p{13cm}|} + \begin{tabular}[c]{|l|p{8cm}|} \hline \textbf{Valore}& \textbf{Significato}\\ \hline @@ -1531,9 +1534,109 @@ qualora si cambino i parametri di output. \end{table} Infine occorre tenere presente che \func{tcsetattr} ritorna con successo anche -se uno qualunque dei cambiamenti richiesti è stato eseguito. Pertanto se si +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 +chiamata a \func{tcgetattr} che essi siano stati eseguiti tutti quanti. + +Oltre ai vari flag per gestire le varie caratteristiche dei terminali, +\var{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 \macro{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.} + +\begin{table}[htb] + \footnotesize + \centering + \begin{tabular}[c]{|l|c|c|p{9cm}|} + \hline + \textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\ + \hline + \hline + \macro{VINTR} &\texttt{0x03}&(\verb|C-c|)& Carattere di interrupt, + provoca l'emissione di + \macro{SIGINT}. \\ + \macro{VQUIT} &\texttt{0x1C}&(\verb|C-\|)& Carattere di uscita provoca + l'emissione di + \macro{SIGQUIT}.\\ + \macro{VERASE} &\texttt{0x7f}& DEL & Carattere di ERASE, cancella + l'ultimo carattere precedente + nella linea.\\ + \macro{VKILL} &\texttt{0x15}&(\verb|C-u|)& Carattere di KILL, cancella + l'intera riga.\\ + \macro{VEOF} &\texttt{0x04}&(\verb|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}.\\ + \macro{VTIME} & --- & --- & Timeout, in decimi di secondo, per + una lettura in modo non canonico. \\ + \macro{VMIN} & --- & --- & Numero minimo di caratteri per una + lettura in modo non canonico.\\ + \macro{VSWTC} &\texttt{0x00}& NUL & Carattere di switch. Non supportato + in Linux.\\ + \macro{VSTART} &\texttt{0x21}&(\verb|C-q|)& Carattere di START. Riavvia un + output bloccato da uno STOP.\\ + \macro{VSTOP} &\texttt{0x23}&(\verb|C-s|)& Carattere di STOP. Blocca + l'output fintanto che non + viene premuto un carattere di + START.\\ + \macro{VSUSP} &\texttt{0x1A}&(\verb|C-z|)& Carattere di + sospensione. Invia il segnale + \macro{SIGTSTP}.\\ + \macro{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. \\ + \macro{VREPRINT}&\texttt{0x12}&(\verb|C-r|)& Ristampa i caratteri non + ancora letti. \\ + \macro{VDISCARD}&\texttt{0x07}&(\verb|C-o|)& Non riconosciuto in Linux. \\ + \macro{VWERASE} &\texttt{0x17}&(\verb|C-w|)& Cancellazione di una parola.\\ + \macro{VLNEXT} &\texttt{0x16}&(\verb|C-v|)& Carattere di escape, serve a + quotare il carattere + successivo che non viene + interpretato ma passato + direttamente all'output. \\ + \macro{VEOL2} &\texttt{0x00}& NUL & Ulteriore carattere di fine + riga. Ha lo stesso effetto di + \macro{VEOL} ma può essere un + carattere diverso. \\ + \hline + \end{tabular} + \caption{Valori dei caratteri di controllo mantenuti nel campo \var{c\_cc} + della struttura \var{termios}.} + \label{tab:sess_termios_cc} +\end{table} + + +A ciascuna di queste funzioni di controllo corriponde un elemento del vettore +\var{c\_cc} che specifica quale è il carattere speciale associato; per +portabilità invece di essere indicati con la loro posizione numerica, i vari +elementi vengono indicizzati attraverso delle opportune costanti il cui nome +corrisponde all'azione ad essi associata. Un elenco completo dei caratteri di +controllo, con le costanti e delle funzionalità associate è riportato in +\tabref{tab:sess_termios_cc}, usando quelle definizioni diventa possibile +assegnare un nuovo carattere di controllo con un codice del tipo: + +\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}% + value.c_cc[VEOL2] = '\n'; +\end{lstlisting} + +\noindent e si potrà poi ricorrere a \func{tcsetattr} per rendere effettiva la +nuova impostazione. + +Come già accennato POSIX.1 prevede due funzioni da utilizzare esplicitamente +per settare la velocità delle linee seriali, \func{cfsetispeed} e +\func{cfsetospeed} + \subsection{Il \textsl{modo canonico}} \label{sec:term_canonic_mode}