X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=ebae61eea60e90e1f2d8d39a3922f55cc013c064;hp=ef1c26a67d197b852bfcd3fb8bf0e1773774dc3e;hb=57c1291f77a1a179e67c4506b3e05e74ad89d21e;hpb=af9d1b58a9723b333d1debd8d2fa65ba0419d976 diff --git a/session.tex b/session.tex index ef1c26a..ebae61e 100644 --- a/session.tex +++ b/session.tex @@ -959,17 +959,17 @@ kernel. La coda di ingresso mantiene i caratteri che sono stati letti dal terminale ma non ancora letti da un processo, la sua dimensione è definita dal parametro di -sistema \macro{MAX\_INPUT}, che ne specifica il limite minimo, in realtà la -coda può essere più grande e cambiare dimensione dinamicamente. Se è stato -abilitato il controllo di flusso in ingresso il driver emette i caratteri di -STOP e START per bloccare e sbloccare l'ingresso dei dati; altrimenti i -caratteri immessi oltre le dimensioni massime vengono persi; in alcuni casi il -driver provvede ad inviare automaticamente un avviso (un carattere di BELL, -che provoca un beep) sull'output quando si eccedono le dimensioni della coda. -Se è abilitato il modo canonico i caratteri in ingresso restano nella coda -fintanto che non viene ricevuto un a capo; un'altra costante, -\macro{MAX\_CANON}, specifica la dimensione massima di una riga in modo -canonico. +sistema \macro{MAX\_INPUT} (si veda \secref{sec:sys_file_limits}), che ne +specifica il limite minimo, in realtà la coda può essere più grande e cambiare +dimensione dinamicamente. Se è stato abilitato il controllo di flusso in +ingresso il driver emette i caratteri di STOP e START per bloccare e sbloccare +l'ingresso dei dati; altrimenti i caratteri immessi oltre le dimensioni +massime vengono persi; in alcuni casi il driver provvede ad inviare +automaticamente un avviso (un carattere di BELL, che provoca un beep) +sull'output quando si eccedono le dimensioni della coda. Se è abilitato il +modo canonico i caratteri in ingresso restano nella coda fintanto che non +viene ricevuto un a capo; un'altra parametro del sistema, \macro{MAX\_CANON}, +specifica la dimensione massima di una riga in modo canonico. La coda di uscita è analoga a quella di ingresso e contiene i caratteri scritti dai processi ma non ancora inviati al terminale. Se è abilitato il @@ -992,8 +992,8 @@ System V in una unica interfaccia, che Alcune di queste funzioni prendono come argomento un file descriptor (in origine molte operazioni venivano effettuate con \func{ioctl}), ma ovviamente possono essere usate solo con file che corrispondano effettivamente ad un -terminale; questo che può essere verificato utilizzando la funzione -\func{isatty}, il cui prototipo è: +terminale (altrimenti si otterrà un errore di \macro{ENOTTY}); questo può +essere evitato utilizzando la funzione \func{isatty}, il cui prototipo è: \begin{prototype}{unistd.h}{int isatty(int desc)} Controlla se il file descriptor \param{desc} è un terminale. @@ -1003,7 +1003,7 @@ terminale; questo che pu \end{prototype} Un'altra funzione che fornisce informazioni su un terminale è \func{ttyname}, -che permette anche di ottenere il nome del terminale associato ad un file +che permette di ottenere il nome del terminale associato ad un file descriptor; il suo prototipo è: \begin{prototype}{unistd.h}{char *ttyname(int desc)} @@ -1015,8 +1015,31 @@ descriptor; il suo prototipo \end{prototype} Si tenga presente che la funzione restituisce un indirizzo di dati statici, -che pertanto possono essere sovrascritti da successive chiamate. La funzione è -prevista da POSIX.1, che non definisce \func{isatty}. +che pertanto possono essere sovrascritti da successive chiamate. Una funzione +funzione analoga, anch'essa prevista da POSIX.1, è \func{ctermid}, il cui +prototipo è: +\begin{prototype}{stdio.h}{char *ctermid(char *s)} + + Restituisce il nome del terminale di controllo del processo. + + \bodydesc{La funzione restituisce il puntatore alla stringa contenente il + pathname del terminale.} +\end{prototype} + +La funzione scrive il pathname del terminale di controllo del processo +chiamante nella stringa posta all'indirizzo specificato dall'argomento +\param{s}. La memoria per contenere la stringa deve essere stata allocata in +precedenza ed essere lunga almeno +\macro{L\_ctermid}\footnote{\macro{L\_ctermid} è una delle varie costanti del + sistema, non trattata esplicitamente in \secref{sec:sys_characteristics} che + indica la dimensione che deve avere una stringa per poter contenere il nome + di un terminale.} caratteri. + +Se si passa come argomento \macro{NULL} la funzione restituisce il puntatore +ad una stringa statica che può essere sovrascritta da chiamate successive. Si +tenga presente che il pathname restituito potrebbe non identificare +univocamente il terminale (ad esempio potrebbe essere \file{/dev/tty}), +inoltre non è detto che il processo possa effettivamente aprire il terminale. I vari attributi vengono mantenuti per ciascun terminale in una struttura \var{termios}, (la cui definizione è in \figref{fig:term_termios}), usata @@ -1053,7 +1076,7 @@ modificare i bit su cui non si interviene. \begin{table}[b!ht] \footnotesize \centering - \begin{tabular}[c]{|l|p{13cm}|} + \begin{tabular}[c]{|l|p{11cm}|} \hline \textbf{Valore}& \textbf{Significato}\\ \hline @@ -1146,7 +1169,7 @@ pseudo-terminali usati nelle connessioni di rete. \begin{table}[htb] \footnotesize \centering - \begin{tabular}[c]{|l|p{13cm}|} + \begin{tabular}[c]{|l|p{11cm}|} \hline \textbf{Valore}& \textbf{Significato}\\ \hline @@ -1229,7 +1252,7 @@ valore. \begin{table}[htb] \footnotesize \centering - \begin{tabular}[c]{|l|p{13cm}|} + \begin{tabular}[c]{|l|p{11cm}|} \hline \textbf{Valore}& \textbf{Significato}\\ \hline @@ -1306,12 +1329,12 @@ funzioni di lettura e scrittura) che mantengono le velocit seriali all'interno dei flag; come accennato in Linux questo viene fatto (seguendo l'esempio di BSD) attraverso due campi aggiuntivi, \var{c\_ispeed} e \var{c\_ospeed}, nella struttura \var{termios} (non mostrati in -\secref{fig:term_termios}). +\figref{fig:term_termios}). \begin{table}[b!ht] \footnotesize \centering - \begin{tabular}[c]{|l|p{13cm}|} + \begin{tabular}[c]{|l|p{11cm}|} \hline \textbf{Valore}& \textbf{Significato}\\ \hline @@ -1412,7 +1435,7 @@ altri.\footnote{in Linux il valore della costante \begin{table}[htb] \footnotesize \centering - \begin{tabular}[c]{|l|c|c|p{9cm}|} + \begin{tabular}[c]{|l|c|c|p{8cm}|} \hline \textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\ \hline @@ -1691,7 +1714,7 @@ sono: caso di errore, che avviene solo quando il valore specificato non è valido.} \end{functions} - + Si noti che le funzioni si limitano a scrivere opportunamente il valore della velocità prescelta \var{speed} all'interno della struttura puntata da \var{termios\_p}; per effettuare l'impostazione effettiva occorrerà poi @@ -1713,7 +1736,7 @@ velocit Un terminale può utilizzare solo alcune delle velocità possibili, le funzioni però non controllano se il valore specificato è valido, dato che non possono sapere a quale terminale le velocità saranno applicate; sarà l'esecuzione di -\finc{tcsetattr} a fallire quando si cercherà di eseguire l'impostazione. +\func{tcsetattr} a fallire quando si cercherà di eseguire l'impostazione. Di norma il valore ha senso solo per i terminali seriali dove indica appunto la velocità della linea di trasmissione; se questa non corrisponde a quella @@ -1787,7 +1810,9 @@ La funzione invia un flusso di bit nulli (che genera una condizione di break) sul terminale associato a \param{fd}; un valore nullo di \param{duration} implica una durata del flusso fra 0.25 e 0.5 secondi, un valore diverso da zero implica una durata pari a \code{duration*T} dove \code{T} è un valore -compreso fra 0.25 e 0.5. +compreso fra 0.25 e 0.5.\footnote{POSIX specifica il comportamento solo nel + caso si sia impostato un valore nullo per \param{duration}; il comportamento + negli altri casi può dipendere dalla implementazione.} Le altre funzioni previste da POSIX servono a controllare il comportamento dell'interazione fra le code associate al terminale e l'utente; la prima è @@ -1811,7 +1836,7 @@ di uscita non % gestori di cancellazione. Una seconda funzione, \func{tcflush}, permette svuotare immediatamente le code -di cancellando tutti i dati presenti; il suo prototipo è: +di cancellando tutti i dati presenti al loro interno; il suo prototipo è: \begin{functions} \headdecl{unistd.h} \headdecl{termios.h} @@ -1823,10 +1848,12 @@ di cancellando tutti i dati presenti; il suo prototipo \macro{ENOTTY}.} \end{functions} -La funzione agisce sul terminale associato a \param{fd}, cancellando tutti i -dati presenti sulla coda specificata dall'argomento \param{queue}, -quest'ultimo può prendere i valori riportati in -\tabref{tab:sess_tcflush_queue}. +La funzione agisce sul terminale associato a \param{fd}, l'argomento +\param{queue} permette di specificare su quale coda (ingresso, uscita o +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. \begin{table}[htb] \footnotesize @@ -1836,9 +1863,9 @@ quest'ultimo pu \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \macro{TCIFLUSH} & Cancella i dati ricevuti ma non ancora letti. \\ - \macro{TCOFLUSH} & Cancella i dati scritti ma non ancora trasmessi. \\ - \macro{TCIOFLUSH}& Cancella tutte e due le code.\\ + \macro{TCIFLUSH} & Cancella i dati sulla coda di ingresso. \\ + \macro{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\ + \macro{TCIOFLUSH}& Cancella i dati su entrambe le code.\\ \hline \end{tabular} \caption{Possibili valori per l'argomento \param{queue} della @@ -1847,53 +1874,56 @@ quest'ultimo pu \end{table} -Infine è possibile è possibile sospendere la trasmissione e la ricezione dei -dati sul terminale usando \func{tcflow}; il suo prototipo è: +L'ultima funzione dell'interfaccia che interviene sulla disciplina di linea è +\func{tcflow}, che viene usata per sospendere la trasmissione e la ricezione +dei dati sul terminale; il suo prototipo è: \begin{functions} \headdecl{unistd.h} \headdecl{termios.h} - \funcdecl{int tcflow(int fd, int action)} . + \funcdecl{int tcflow(int fd, int action)} + Sospende e rivvia 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 \macro{EBADF} o \macro{ENOTTY}.} \end{functions} +La funzione permette di controllare (interrompendo e facendo riprendere) il +flusso dei dati fra il terminale ed il sistema sia in ingresso che in uscita. +Il comportamento della funzione è regolato dall'argomento \param{action}, i +cui possibili valori, e relativa azione eseguita dalla funzione, sono +riportati in \secref{tab:sess_tcflow_action}. \begin{table}[htb] \footnotesize \centering \begin{tabular}[c]{|l|p{8cm}|} \hline - \textbf{Valore}& \textbf{Significato}\\ + \textbf{Valore}& \textbf{Azione}\\ \hline \hline - \macro{TCOOFF} & Cancella i dati ricevuti ma non ancora letti. \\ - \macro{TCOON} & Cancella i dati scritti ma non ancora trasmessi. \\ - \macro{TCIOFF}& Cancella tutte e due le code.\\ - \macro{TCION}& Cancella tutte e due le code.\\ + \macro{TCOOFF}& Sospende l'output.\\ + \macro{TCOON} & Riprende un output precedentemente sospeso.\\ + \macro{TCIOFF}& Il sistema trasmette un carattere di STOP, che + fa interrompere la trasmissione dei dati dal terminale. \\ + \macro{TCION} & Il sistema trasmette un carattere di START, che + fa riprendere la trasmissione dei dati dal terminale.\\ \hline \end{tabular} - \caption{Possibili valori per l'argomento \param{queue} della - funzione \func{tcflush}.} - \label{tab:sess_tcflush_queue} + \caption{Possibili valori per l'argomento \param{action} della + funzione \func{tcflow}.} + \label{tab:sess_tcflow_action} \end{table} -\subsection{Il \textsl{modo canonico}} -\label{sec:term_canonic_mode} - -Il modo canonico - - -\subsection{Il \textsl{modo non canonico}} -\label{sec:term_noncanonic_mode} +\subsection{Il \textsl{modo canonico} ed il \textsl{modo non canonico}} +\label{sec:term_terminal_modes} Il modo non canonico - - + %%% Local Variables: %%% mode: latex