X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=dbee21978dc0b1289126948d8f0e2716d19e03ef;hp=10801394d3ca3156407b0c5268b9043c4613a2d2;hb=d47f15496fa85c8ec22edcde608f2665ec5b95ae;hpb=fd86592a845b5f76ad43ba2374ca0b798ffca595 diff --git a/session.tex b/session.tex index 1080139..dbee219 100644 --- a/session.tex +++ b/session.tex @@ -234,7 +234,8 @@ 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. +comunque entrambe per evitare di esporsi ad una race +condition\index{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 @@ -1091,18 +1092,7 @@ ulteriori informazioni.\footnote{la definizione della struttura si trova in \begin{figure}[!htb] \footnotesize \centering \begin{minipage}[c]{15cm} - \begin{lstlisting}[labelstep=0]{} -struct termios { - tcflag_t c_iflag; /* input modes */ - tcflag_t c_oflag; /* output modes */ - tcflag_t c_cflag; /* control modes */ - tcflag_t c_lflag; /* local modes */ - cc_t c_cc[NCCS]; /* control characters */ - cc_t c_line; /* line discipline */ - speed_t c_ispeed; /* input speed */ - speed_t c_ospeed; /* output speed */ -; - \end{lstlisting} + \includestruct{listati/termios.h} \end{minipage} \normalsize \caption{La struttura \structd{termios}, che identifica le proprietà di un @@ -1283,10 +1273,7 @@ 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]{}% - c_oflag &= (~CRDLY); - c_oflag |= CR1; -\end{lstlisting} +\includecodesnip{listati/oflag.c} \noindent che prima cancella i bit della maschera in questione e poi setta il valore. @@ -1555,9 +1542,7 @@ 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} +\includecodesnip{listati/value_c_cc.c} La maggior parte di questi caratteri (tutti tranne \const{VTIME} e \const{VMIN}) hanno effetto solo quando il terminale viene utilizzato in modo @@ -1650,30 +1635,11 @@ effettuano pi chiamata a \func{tcgetattr} che essi siano stati eseguiti tutti quanti. \begin{figure}[!htb] - \footnotesize - \begin{lstlisting}{}% -#include -#include -#include - -int SetTermAttr(int fd, tcflag_t flag) -{ - struct termios values; - int res; - res = tcgetattr (desc, &values); - if (res) { - perror("Cannot get attributes"); - return res; - } - values.c_lflag |= flag; - res = tcsetattr (desc, TCSANOW, &values); - if (res) { - perror("Cannot set attributes"); - return res; - } - return 0; -} - \end{lstlisting} + \footnotesize \centering + \begin{minipage}[c]{15cm} + \includecodesample{listati/SetTermAttr.c} + \end{minipage} + \normalsize \caption{Codice della funzione \func{SetTermAttr} che permette di impostare uno dei flag di controllo locale del terminale.} \label{fig:term_set_attr} @@ -1702,33 +1668,18 @@ infine si scrive il nuovo valore modificato con \func{tcsetattr} o uscendo normalmente. \begin{figure}[!htb] - \footnotesize - \begin{lstlisting}{}% -int UnSetTermAttr(int fd, tcflag_t flag) -{ - struct termios values; - int res; - res = tcgetattr (desc, &values); - if (res) { - perror("Cannot get attributes"); - return res; - } - values.c_lflag &= (~flag); - res = tcsetattr (desc, TCSANOW, &values); - if (res) { - perror("Cannot set attributes"); - return res; - } - return 0; -} - \end{lstlisting} + \footnotesize \centering + \begin{minipage}[c]{15cm} + \includecodesample{listati/UnSetTermAttr.c} + \end{minipage} + \normalsize \caption{Codice della funzione \func{UnSetTermAttr} che permette di rimuovere uno dei flag di controllo locale del terminale.} \label{fig:term_unset_attr} \end{figure} La seconda funzione, \func{UnSetTermAttr}, è assolutamente identica alla -prima, solo che in questo caso (in \texttt{\small 15}) si rimuovono i bit +prima, solo che in questo caso, in (\texttt{\small 15}), si rimuovono i bit specificati dall'argomento \param{flag} usando un AND binario del valore negato. @@ -1900,7 +1851,7 @@ La funzione agisce sul terminale associato a \param{fd}, l'argomento entrambe), operare. Esso può prendere i valori riportati in \tabref{tab:sess_tcflush_queue}, nel caso si specifichi la coda di ingresso cancellerà i dati ricevuti ma non ancora letti, nel caso si specifichi la coda -di uscita cancellerài dati scritti ma non ancora trasmessi. +di uscita cancellerà i dati scritti ma non ancora trasmessi. \begin{table}[htb] \footnotesize @@ -1930,7 +1881,7 @@ dei dati sul terminale; il suo prototipo \funcdecl{int tcflow(int fd, int action)} - Sospende e rivvia il flusso dei dati sul terminale. + Sospende e riavvia il flusso dei dati sul terminale. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di errore, nel qual caso \var{errno} assumerà i valori \errval{EBADF} o