%% session.tex
%%
-%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2009 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
%% license is included in the section entitled "GNU Free Documentation
%% License".
%%
+
\chapter{Terminali e sessioni di lavoro}
\label{cha:session}
funzionalità della shell infatti c'è anche quella di consentire di concatenare
più programmi in una sola riga di comando con le pipe, ed in tal caso verranno
eseguiti più programmi, inoltre, anche quando si invoca un singolo programma,
-questo potrà sempre lanciare sottoprocessi per eseguire dei compiti specifici.
+questo potrà sempre lanciare sotto-processi per eseguire dei compiti specifici.
Per questo l'esecuzione di un comando può originare più di un processo; quindi
nella gestione del job control non si può far riferimento ai singoli processi.
In generale allora all'interno di una sessione avremo un eventuale (può non
esserci) \itindex{process~group} \textit{process group} in
\textit{foreground}, che riunisce i processi che possono accedere al
-terminale, e più \textit{process group} in \textit{background}, che non
-possono accedervi. Il job control prevede che quando un processo appartenente
-ad un raggruppamento in \textit{background} cerca di accedere al terminale,
-venga inviato un segnale a tutti i processi del raggruppamento, in modo da
-bloccarli (vedi sez.~\ref{sec:sess_ctrl_term}).
+terminale, e più \itindex{process~group} \textit{process group} in
+\textit{background}, che non possono accedervi. Il job control prevede che
+quando un processo appartenente ad un raggruppamento in \textit{background}
+cerca di accedere al terminale, venga inviato un segnale a tutti i processi
+del raggruppamento, in modo da bloccarli (vedi sez.~\ref{sec:sess_ctrl_term}).
Un comportamento analogo si ha anche per i segnali generati dai comandi di
tastiera inviati dal terminale che vengono inviati a tutti i processi del
caso di successo, e -1 in caso di errore, nel qual caso \var{errno} assumerà
i valori:
\begin{errlist}
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] In alcune implementazioni viene restituito quando il
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] in alcune implementazioni viene restituito quando il
processo selezionato non fa parte della stessa sessione del processo
corrente.
\end{errlist}
processi dall'uno all'altro, ma sempre all'interno di una stessa sessione.
Ciascun raggruppamento di processi ha sempre un processo principale, il
-cosiddetto \itindex{process~group~leader}\textit{process group leader}, che è
+cosiddetto \itindex{process~group~leader} \textit{process group leader}, che è
identificato dall'avere un \acr{pgid} uguale al suo \acr{pid}, in genere
questo è il primo processo del raggruppamento, che si incarica di lanciare
tutti gli altri. Un nuovo raggruppamento si crea con la funzione
\bodydesc{La funzione ritorna il valore del nuovo \textit{process group}, e
-1 in caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ESRCH}] Il processo selezionato non esiste.
- \item[\errcode{EPERM}] Il cambiamento non è consentito.
- \item[\errcode{EACCES}] Il processo ha già eseguito una \func{exec}.
- \item[\errcode{EINVAL}] Il valore di \param{pgid} è negativo.
+ \item[\errcode{ESRCH}] il processo selezionato non esiste.
+ \item[\errcode{EPERM}] il cambiamento non è consentito.
+ \item[\errcode{EACCES}] il processo ha già eseguito una \func{exec}.
+ \item[\errcode{EINVAL}] il valore di \param{pgid} è negativo.
\end{errlist}
}
\end{prototype}
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 \textit{race
- condition}\itindex{race~condition}.
+occorre eseguirle comunque entrambe per evitare di esporsi ad una
+\itindex{race~condition} \textit{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
A tale scopo lo standard POSIX.1 prevede che ad ogni sessione possa essere
associato un terminale di controllo; in Linux questo viene realizzato
mantenendo fra gli attributi di ciascun processo anche qual'è il suo terminale
-di controllo.\footnote{Lo standard POSIX.1 non specifica nulla riguardo
+di controllo.\footnote{lo standard POSIX.1 non specifica nulla riguardo
l'implementazione; in Linux anch'esso viene mantenuto nella solita struttura
\struct{task\_struct}, nel campo \var{tty}.} In generale ogni processo
eredita dal padre, insieme al \acr{pgid} e al \acr{sid} anche il terminale di
\bodydesc{La funzione restituisce 0 in caso di successo, e -1 in caso di
errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTTY}] Il file \param{fd} non corrisponde al terminale di
+ \item[\errcode{ENOTTY}] il file \param{fd} non corrisponde al terminale di
controllo del processo chiamante.
- \item[\errcode{ENOSYS}] Il sistema non supporta il job control.
- \item[\errcode{EPERM}] Il \textit{process group} specificato non è nella
+ \item[\errcode{ENOSYS}] il sistema non supporta il job control.
+ \item[\errcode{EPERM}] il \textit{process group} specificato non è nella
stessa sessione del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{EINVAL}.
gruppo di \textit{foreground}, e -1 in caso di errore, nel qual caso
\var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{ENOTTY}] Non c'è un terminale di controllo o \param{fd} non
+ \item[\errcode{ENOTTY}] non c'è un terminale di controllo o \param{fd} non
corrisponde al terminale di controllo del processo chiamante.
\end{errlist}
ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
decifrare, ma deve poi leggere la password dal terminale.
Un'altra caratteristica del terminale di controllo usata nel job control è che
-utilizzando su di esso le combinazioni di tasti speciali (\cmd{C-z},
-\cmd{C-c}, \cmd{C-y} e \verb|C-\|) si farà sì che il kernel invii i
+utilizzando su di esso le combinazioni di tasti speciali (\texttt{C-z},
+\texttt{C-c}, \texttt{C-y} e \texttt{C-|}) si farà sì che il kernel invii i
corrispondenti segnali (rispettivamente \const{SIGTSTP}, \const{SIGINT},
\const{SIGQUIT} e \const{SIGTERM}, trattati in sez.~\ref{sec:sig_job_control})
a tutti i processi del raggruppamento di \textit{foreground}; in questo modo
controllo. Consideriamo allora cosa avviene di norma nel \textit{job
control}: una sessione viene creata con \func{setsid} che crea anche un
nuovo \itindex{process~group} \textit{process group}: per definizione
-quest'ultimo è sempre \textsl{orfano}, dato che il padre del leader di
-sessione è fuori dalla stessa e il nuovo \textit{process group}
-\itindex{process~group} contiene solo il leader di sessione. Questo è un caso
-limite, e non viene emesso nessun segnale perché quanto previsto dallo
-standard riguarda solo i raggruppamenti che diventano orfani in seguito alla
-terminazione di un processo.\footnote{l'emissione dei segnali infatti avviene
- solo nella fase di uscita del processo, come una delle operazioni legate
- all'esecuzione di \func{\_exit}, secondo quanto illustrato in
- sez.~\ref{sec:proc_termination}.}
+quest'ultimo è sempre \itindex{process~group~orphaned} \textsl{orfano}, dato
+che il padre del leader di sessione è fuori dalla stessa e il nuovo
+\textit{process group} \itindex{process~group} contiene solo il leader di
+sessione. Questo è un caso limite, e non viene emesso nessun segnale perché
+quanto previsto dallo standard riguarda solo i raggruppamenti che diventano
+orfani in seguito alla terminazione di un processo.\footnote{l'emissione dei
+ segnali infatti avviene solo nella fase di uscita del processo, come una
+ delle operazioni legate all'esecuzione di \func{\_exit}, secondo quanto
+ illustrato in sez.~\ref{sec:proc_termination}.}
Il leader di sessione provvederà a creare nuovi raggruppamenti che a questo
punto non sono orfani in quanto esso resta padre per almeno uno dei processi
distribuzione \textit{Slackware}, come alcune distribuzioni su dischetto, ed
altre distribuzioni dedicate a compiti limitati e specifici.} viene usata
la procedura di avvio di System V; questa prevede che \cmd{init} legga dal
-file di configurazione \file{/etc/inittab} quali programmi devono essere
+file di configurazione \conffile{/etc/inittab} quali programmi devono essere
lanciati, ed in quali modalità, a seconda del cosiddetto \textit{run level},
anch'esso definito nello stesso file.
tutto ripetuto per ciascuno dei terminali che si hanno a disposizione (o per
un certo numero di essi, nel caso delle console virtuali), secondo quanto
indicato dall'amministratore nel file di configurazione del programma,
-\file{/etc/inittab}.
+\conffile{/etc/inittab}.
Quando viene lanciato da \cmd{init} il programma parte con i privilegi di
amministratore e con un ambiente vuoto; \cmd{getty} si cura di chiamare
Questi programmi, che devono essere eseguiti in modalità non interattiva e
senza nessun intervento dell'utente, sono normalmente chiamati
\textsl{demoni}, (o \textit{daemons}), nome ispirato dagli omonimi spiritelli
-che svolgevano compiti vari, di cui parlava Socrate (che sosteneva di averne
-uno al suo servizio).\footnote{NdT. ricontrollare, i miei ricordi di filosofia
- sono piuttosto datati.}
+della mitologia greca che svolgevano compiti che gli dei trovavano noiosi, di
+cui parla anche Socrate (che sosteneva di averne uno al suo servizio).
+
+%TODO ricontrollare, i miei ricordi di filosofia sono piuttosto datati.
Se però si lancia un programma demone dalla riga di comando in un sistema che
supporta, come Linux, il \textit{job control} esso verrà comunque associato ad
il programma), per evitare che la directory da cui si è lanciato il processo
resti in uso e non sia possibile rimuoverla o smontare il filesystem che la
contiene.
-\item Impostare la maschera dei permessi (di solito con \code{umask(0)}) in
- modo da non essere dipendenti dal valore ereditato da chi ha lanciato
- originariamente il processo.
+\item Impostare la \itindex{umask} maschera dei permessi (di solito con
+ \code{umask(0)}) in modo da non essere dipendenti dal valore ereditato da
+ chi ha lanciato originariamente il processo.
\item Chiudere tutti i file aperti che non servono più (in generale tutti); in
particolare vanno chiusi i file standard che di norma sono ancora associati
al terminale (un'altra opzione è quella di redirigerli verso
Il servizio prevede vari meccanismi di notifica, e, come ogni altro servizio
in un sistema unix-like, viene gestito attraverso un apposito programma,
\cmd{syslogd}, che è anch'esso un \textsl{demone}. In generale i messaggi di
-errore vengono raccolti dal file speciale \file{/dev/log}, un
-\textit{socket}\index{socket} locale (vedi sez.~\ref{sec:sock_sa_local})
-dedicato a questo scopo, o via rete, con un \textit{socket} UDP, o da un
-apposito demone, \cmd{klogd}, che estrae i messaggi del kernel.\footnote{i
- messaggi del kernel sono tenuti in un buffer circolare e scritti tramite la
- funzione \func{printk}, analoga alla \func{printf} usata in user space; una
- trattazione eccellente dell'argomento si trova in \cite{LinDevDri}, nel
- quarto capitolo.}
+errore vengono raccolti dal file speciale \file{/dev/log}, un socket locale
+(vedi sez.~\ref{sec:sock_sa_local}) dedicato a questo scopo, o via rete, con
+un socket UDP, o da un apposito demone, \cmd{klogd}, che estrae i messaggi del
+kernel.\footnote{i messaggi del kernel sono tenuti in un buffer circolare e
+ scritti tramite la funzione \func{printk}, analoga alla \func{printf} usata
+ in user space; una trattazione eccellente dell'argomento si trova in
+ \cite{LinDevDri}, nel quarto capitolo.}
Il servizio permette poi di trattare i vari messaggi classificandoli
attraverso due indici; il primo, chiamato \textit{facility}, suddivide in
\item scartare.
\end{itemize*}
secondo le modalità che questo preferisce e che possono essere impostate
-attraverso il file di configurazione \file{/etc/syslog.conf} (maggiori
+attraverso il file di configurazione \conffile{/etc/syslog.conf} (maggiori
dettagli si possono trovare sulle pagine di manuale per questo file e per
\cmd{syslogd}).
Le \acr{glibc} definiscono una serie di funzioni standard con cui un processo
può accedere in maniera generica al servizio di \textit{syslog}, che però
funzionano solo localmente; se si vogliono inviare i messaggi ad un altro
-sistema occorre farlo esplicitamente con un socket\index{socket} UDP, o
-utilizzare le capacità di reinvio del servizio.
+sistema occorre farlo esplicitamente con un socket UDP, o utilizzare le
+capacità di reinvio del servizio.
La prima funzione definita dall'interfaccia è \funcd{openlog}, che apre una
connessione al servizio di \textit{syslog}; essa in generale non è necessaria
\hline
\hline
\const{LOG\_AUTH} & Messaggi relativi ad autenticazione e sicurezza,
- obsoleto, è sostituito da \const{LOG\_AUTHPRIV}. \\
+ obsoleto, è sostituito da \const{LOG\_AUTHPRIV}.\\
\const{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\
\const{LOG\_CRON} & Messaggi dei demoni di gestione dei comandi
programmati (\cmd{cron} e \cmd{at}).\\
\const{LOG\_DAEMON} & Demoni di sistema.\\
\const{LOG\_FTP} & Server FTP.\\
- \const{LOG\_KERN} & Messaggi del kernel\\
- \const{LOG\_LOCAL0} & Riservato all'amministratore per uso locale\\
+ \const{LOG\_KERN} & Messaggi del kernel.\\
+ \const{LOG\_LOCAL0} & Riservato all'amministratore per uso locale.\\
--- & \\
- \const{LOG\_LOCAL7} & Riservato all'amministratore per uso locale\\
- \const{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti \\
- \const{LOG\_MAIL} & Messaggi del sistema di posta elettronica\\
+ \const{LOG\_LOCAL7} & Riservato all'amministratore per uso locale.\\
+ \const{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti.\\
+ \const{LOG\_MAIL} & Messaggi del sistema di posta elettronica.\\
\const{LOG\_NEWS} & Messaggi del sistema di gestione delle news
- (USENET) \\
- \const{LOG\_SYSLOG} & Messaggi generati dallo stesso \cmd{syslogd}\\
- \const{LOG\_USER} & Messaggi generici a livello utente\\
- \const{LOG\_UUCP} & Messaggi del sistema UUCP\\
+ (USENET).\\
+ \const{LOG\_SYSLOG} & Messaggi generati dallo stesso \cmd{syslogd}.\\
+ \const{LOG\_USER} & Messaggi generici a livello utente.\\
+ \const{LOG\_UUCP} & Messaggi del sistema UUCP.\\
\hline
\end{tabular}
\caption{Valori possibili per l'argomento \param{facility} di \func{openlog}.}
\const{LOG\_NDELAY} & Sostituisce \const{LOG\_AUTH}.\\
\const{LOG\_NOWAIT} & Messaggi dei demoni di gestione dei comandi
programmati (\cmd{cron} e \cmd{at}).\\
-\const{LOG\_ODELAY} & .\\
+\const{LOG\_ODELAY} & \\
\const{LOG\_PERROR} & Stampa anche su \file{stderr}.\\
\const{LOG\_PID} & Inserisce nei messaggi il \acr{pid} del processo
- chiamante. \\
+ chiamante.\\
\hline
\end{tabular}
\caption{Valori possibili per l'argomento \param{option} di \func{openlog}.}
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{LOG\_EMERG} & Il sistema è inutilizzabile. \\
+ \const{LOG\_EMERG} & Il sistema è inutilizzabile.\\
\const{LOG\_ALERT} & C'è una emergenza che richiede intervento
immediato.\\
\const{LOG\_CRIT} & Si è in una condizione critica.\\
\const{LOG\_ERR} & Si è in una condizione di errore.\\
\const{LOG\_WARNING} & Messaggio di avvertimento.\\
\const{LOG\_NOTICE} & Notizia significativa relativa al comportamento.\\
- \const{LOG\_INFO} & Messaggio informativo. \\
+ \const{LOG\_INFO} & Messaggio informativo.\\
\const{LOG\_DEBUG} & Messaggio di debug.\\
\hline
\end{tabular}
\textit{pathname} del terminale.}
\end{prototype}
-La funzione scrive il \itindex{pathname}\textit{pathname} del terminale di
+La funzione scrive il \itindex{pathname} \textit{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
che indica la dimensione che deve avere una stringa per poter contenere il
nome di un terminale.} caratteri.
-Esiste infine una versione rientrante \funcd{ttyname\_r} della funzione
-\func{ttyname}, che non presenta il problema dell'uso di una zona di memoria
-statica; il suo prototipo è:
+Esiste infine una versione \index{funzioni!rientranti} rientrante
+\funcd{ttyname\_r} della funzione \func{ttyname}, che non presenta il problema
+dell'uso di una zona di memoria statica; il suo prototipo è:
\begin{prototype}{unistd.h}{int ttyname\_r(int desc, char *buff, size\_t len)}
Restituisce il nome del terminale associato al file \param{desc}.
Se si passa come argomento \val{NULL} la funzione restituisce il puntatore ad
una stringa statica che può essere sovrascritta da chiamate successive. Si
-tenga presente che il \itindex{pathname}\textit{pathname} restituito
+tenga presente che il \itindex{pathname} \textit{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.
l'esempio di BSD, aggiunge i due campi \var{c\_ispeed} e \var{c\_ospeed} per
mantenere le velocità delle linee seriali, ed un campo ulteriore,
\var{c\_line} per ... (NdT, trovare a che serve).}
+% TODO trovare a che serve
\begin{figure}[!htb]
\footnotesize \centering
\begin{table}[b!ht]
\footnotesize
\centering
- \begin{tabular}[c]{|l|p{11cm}|}
+ \begin{tabular}[c]{|l|p{10cm}|}
\hline
\textbf{Valore}& \textbf{Significato}\\
\hline
\const{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una
\textit{condizione di BREAK} è definita nel contesto di
una trasmissione seriale asincrona come una sequenza di
- bit nulli più lunga di un byte. \\
+ bit nulli più lunga di un byte.\\
\const{BRKINT} & Controlla la reazione ad un BREAK quando
\const{IGNBRK} non è impostato. Se \const{BRKINT} è
impostato il BREAK causa lo scarico delle code,
(\textit{carriage return}, \verb|'\r'|) viene scartato
dall'input. Può essere utile per i terminali che inviano
entrambi i caratteri di ritorno carrello e a capo
- (\textit{newline}, \verb|'\n'|). \\
+ (\textit{newline}, \verb|'\n'|).\\
\const{ICRNL} & Se impostato un carattere di ritorno carrello
(\verb|'\r'|) sul terminale viene automaticamente
trasformato in un a capo (\verb|'\n'|) sulla coda di
- input. \\
+ input.\\
\const{INLCR} & Se impostato il carattere di a capo
(\verb|'\n'|) viene automaticamente trasformato in un
ritorno carrello (\verb|'\r'|).\\
\const{IXOFF} & Se impostato abilita il controllo di flusso in
ingresso. Il computer emette un carattere di STOP per
bloccare l'input dal terminale e lo sblocca con il
- carattere START. \\
+ carattere START.\\
\const{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa
di ingresso; in Linux non è implementato e il kernel si
comporta cose se fosse sempre impostato (è una estensione
- BSD). \\
+ BSD).\\
\hline
\end{tabular}
\caption{Costanti identificative dei vari bit del flag di controllo
\begin{table}[htb]
\footnotesize
\centering
- \begin{tabular}[c]{|l|p{11cm}|}
+ \begin{tabular}[c]{|l|p{10cm}|}
\hline
\textbf{Valore}& \textbf{Significato}\\
\hline
\begin{table}[htb]
\footnotesize
\centering
- \begin{tabular}[c]{|l|p{11cm}|}
+ \begin{tabular}[c]{|l|p{10cm}|}
\hline
\textbf{Valore}& \textbf{Significato}\\
\hline
\const{O\_NOBLOCK} si bloccherà il processo finché
non si è stabilita una connessione con il modem; inoltre
se viene rilevata una disconnessione viene inviato un
- \const{SIGHUP} al processo di controllo del terminale. La
- lettura su un terminale sconnesso comporta una condizione
- di \textit{end of file} e la scrittura un errore di
- \errcode{EIO}. \\
+ segnale di \const{SIGHUP} al processo di controllo del
+ terminale. La lettura su un terminale sconnesso comporta
+ una condizione di \textit{end of file} e la scrittura un
+ errore di \errcode{EIO}.\\
\const{HUPCL} & Se è impostato viene distaccata la connessione del
modem quando l'ultimo dei processi che ha ancora un file
aperto sul terminale lo chiude o esce.\\
parità. La reazione in caso di errori dipende dai
relativi valori per \var{c\_iflag}, riportati in
tab.~\ref{tab:sess_termios_iflag}. Se non è impostato i
- bit di parità non vengono
- generati e i caratteri non vengono controllati.\\
+ bit di parità non vengono generati e i caratteri non
+ vengono controllati.\\
\const{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se
impostato viene usata una parità è dispari, altrimenti
viene usata una parità pari.\\
\const{CSIZE} & Maschera per i bit usati per specificare la dimensione
del carattere inviato lungo la linea di trasmissione, i
valore ne indica la lunghezza (in bit), ed i valori
- possibili sono \val{CS5}, \val{CS6},
- \val{CS7} e \val{CS8}
+ possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8}
corrispondenti ad un analogo numero di bit.\\
\const{CBAUD} & Maschera dei bit (4+1) usati per impostare della velocità
- della linea (il \textit{baud rate}) in ingresso.
- In Linux non è implementato in quanto viene
- usato un apposito campo di \struct{termios}.\\
+ della linea (il \textit{baud rate}) in ingresso; in Linux
+ non è implementato in quanto viene usato un apposito
+ campo di \struct{termios}.\\
\const{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della
linea, per le stesse motivazioni del precedente non è
implementato in Linux.\\
\const{CIBAUD} & Maschera dei bit della velocità della linea in
- ingresso. Analogo a \const{CBAUD}, anch'esso in Linux è
- mantenuto in un apposito campo di \struct{termios}. \\
+ ingresso; analogo a \const{CBAUD}, anch'esso in Linux è
+ mantenuto in un apposito campo di \struct{termios}.\\
\const{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale,
attraverso l'utilizzo delle dei due fili di RTS e CTS.\\
\hline
\begin{table}[b!ht]
\footnotesize
\centering
- \begin{tabular}[c]{|l|p{11cm}|}
+ \begin{tabular}[c]{|l|p{10cm}|}
\hline
\textbf{Valore}& \textbf{Significato}\\
\hline
cancellando l'ultimo carattere della riga corrente dallo
schermo; altrimenti il carattere è rimandato in eco per
mostrare quanto accaduto (usato per i terminali con
- l'uscita su una stampante). \\
+ l'uscita su una stampante).\\
\const{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di
cancellazione in una modalità adatta ai terminali con
l'uscita su stampante; l'invio del carattere di ERASE
- comporta la stampa di un \verb|\| seguito dal carattere
- cancellato, e così via in caso di successive
+ comporta la stampa di un ``\texttt{|}'' seguito dal
+ carattere cancellato, e così via in caso di successive
cancellazioni, quando si riprende ad immettere carattere
- normali prima verrà stampata una \texttt{/}.\\
+ normali prima verrà stampata una ``\texttt{/}''.\\
\const{ECHOK} & Se impostato abilita il trattamento della visualizzazione
del carattere KILL, andando a capo dopo aver visualizzato
lo stesso, altrimenti viene solo mostrato il carattere e
sta all'utente ricordare che l'input precedente è stato
- cancellato. \\
+ cancellato.\\
\const{ECHOKE} & Se impostato abilita il trattamento della visualizzazione
del carattere KILL cancellando i caratteri precedenti
nella linea secondo le modalità specificate dai valori di
\const{ECHOE} e \const{ECHOPRT}.\\
\const{ECHONL} & Se impostato viene effettuato l'eco di un a
capo (\verb|\n|) anche se non è stato impostato
- \const{ECHO}. \\
+ \const{ECHO}.\\
\const{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di
controllo ASCII (tranne TAB, NL, START, e STOP) sono
- mostrati nella forma che prepone un \verb|^| alla
- lettera ottenuta sommando \texttt{0x40} al valore del
+ mostrati nella forma che prepone un ``\texttt{\circonf}''
+ alla lettera ottenuta sommando \texttt{0x40} al valore del
carattere (di solito questi si possono ottenere anche
direttamente premendo il tasto \texttt{ctrl} più la
relativa lettera).\\
\const{IEXTEN} & Abilita alcune estensioni previste dalla
implementazione. Deve essere impostato perché caratteri
speciali come EOL2, LNEXT, REPRINT e WERASE possano
- essere interpretati. \\
+ essere interpretati.\\
\const{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso
e uscita quando vengono emessi i segnali \const{SIGINT},
\const{SIGQUIT} e \const{SIGSUSP}.\\
background che cerca di scrivere sul terminale.\\
\const{XCASE} & Se impostato il terminale funziona solo con le
maiuscole. L'input è convertito in minuscole tranne per i
- caratteri preceduti da una \verb|\|. In output le
- maiuscole sono precedute da una \verb|\| e le minuscole
- convertite in maiuscole.\\
+ caratteri preceduti da una ``\texttt{\bslash}''. In output
+ le maiuscole sono precedute da una ``\texttt{\bslash}'' e
+ le minuscole convertite in maiuscole.\\
\const{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in
lettura.\\
\const{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene
\begin{table}[htb]
\footnotesize
\centering
- \begin{tabular}[c]{|l|c|c|p{8cm}|}
+ \begin{tabular}[c]{|l|c|c|p{7cm}|}
\hline
\textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\
\hline
\hline
- \const{VINTR} &\texttt{0x03}&(\verb|C-c|)& Carattere di interrupt,
+ \const{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt,
provoca l'emissione di
- \const{SIGINT}. \\
- \const{VQUIT} &\texttt{0x1C}&(\verb|C-\|)& Carattere di uscita provoca
+ \const{SIGINT}.\\
+ \const{VQUIT} &\texttt{0x1C}&(\texttt{C-|})& Carattere di uscita provoca
l'emissione di
\const{SIGQUIT}.\\
- \const{VERASE} &\texttt{0x7f}& DEL & Carattere di ERASE, cancella
- l'ultimo carattere precedente
- nella linea.\\
- \const{VKILL} &\texttt{0x15}&(\verb|C-u|)& Carattere di KILL, cancella
+ \const{VERASE}&\texttt{0x7f}& DEL & Carattere di ERASE, cancella
+ l'ultimo carattere
+ precedente nella linea.\\
+ \const{VKILL} &\texttt{0x15}&(\texttt{C-u})& Carattere di KILL, cancella
l'intera riga.\\
- \const{VEOF} &\texttt{0x04}&(\verb|C-d|)& Carattere di
+ \const{VEOF} &\texttt{0x04}&(\texttt{C-d})& Carattere di
\textit{end-of-file}. Causa
l'invio del contenuto del
buffer di ingresso al
zero caratteri, cioè la
condizione di
\textit{end-of-file}.\\
- \const{VTIME} & --- & --- & Timeout, in decimi di secondo, per
- una lettura in modo non canonico. \\
- \const{VMIN} & --- & --- & Numero minimo di caratteri per una
- lettura in modo non canonico.\\
- \const{VSWTC} &\texttt{0x00}& NUL & Carattere di switch. Non supportato
- in Linux.\\
- \const{VSTART} &\texttt{0x21}&(\verb|C-q|)& Carattere di START. Riavvia un
+ \const{VTIME} & --- & --- & Timeout, in decimi di secondo, per
+ una lettura in modo non canonico.\\
+ \const{VMIN} & --- & --- & Numero minimo di caratteri per una
+ lettura in modo non canonico.\\
+ \const{VSWTC} &\texttt{0x00}& NUL & Carattere di switch. Non supportato
+ in Linux.\\
+ \const{VSTART}&\texttt{0x21}&(\texttt{C-q})& Carattere di START. Riavvia un
output bloccato da uno STOP.\\
- \const{VSTOP} &\texttt{0x23}&(\verb|C-s|)& Carattere di STOP. Blocca
+ \const{VSTOP} &\texttt{0x23}&(\texttt{C-s})& Carattere di STOP. Blocca
l'output fintanto che non
viene premuto un carattere di
START.\\
- \const{VSUSP} &\texttt{0x1A}&(\verb|C-z|)& Carattere di
+ \const{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di
sospensione. Invia il segnale
\const{SIGTSTP}.\\
- \const{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. \\
- \const{VREPRINT}&\texttt{0x12}&(\verb|C-r|)& Ristampa i caratteri non
- ancora letti. \\
- \const{VDISCARD}&\texttt{0x07}&(\verb|C-o|)& Non riconosciuto in Linux. \\
- \const{VWERASE} &\texttt{0x17}&(\verb|C-w|)& Cancellazione di una parola.\\
- \const{VLNEXT} &\texttt{0x16}&(\verb|C-v|)& Carattere di escape, serve a
+ \const{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.\\
+ \const{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non
+ ancora letti.\\
+ \const{VDISCARD}&\texttt{0x07}&(\texttt{C-o})& Non riconosciuto in Linux.\\
+ \const{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una
+ parola.\\
+ \const{VLNEXT}&\texttt{0x16}&(\texttt{C-v})& Carattere di escape, serve a
quotare il carattere
successivo che non viene
interpretato ma passato
- direttamente all'output. \\
- \const{VEOL2} &\texttt{0x00}& NUL & Ulteriore carattere di fine
- riga. Ha lo stesso effetto di
- \const{VEOL} ma può essere un
- carattere diverso. \\
+ direttamente all'output.\\
+ \const{VEOL2} &\texttt{0x00}& NUL & Ulteriore carattere di fine
+ riga. Ha lo stesso effetto di
+ \const{VEOL} ma può essere un
+ carattere diverso. \\
\hline
\end{tabular}
\caption{Valori dei caratteri di controllo mantenuti nel campo \var{c\_cc}
\bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
caso di errore, nel qual caso \var{errno} assumerà i valori:
\begin{errlist}
- \item[\errcode{EINTR}] La funzione è stata interrotta.
+ \item[\errcode{EINTR}] la funzione è stata interrotta.
\end{errlist}
ed inoltre \errval{EBADF}, \errval{ENOTTY} ed \errval{EINVAL}.
}
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{TCSANOW} & Esegue i cambiamenti in maniera immediata. \\
+ \const{TCSANOW} & Esegue i cambiamenti in maniera immediata.\\
\const{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che
- tutto l'output presente sulle code è stato scritto. \\
+ tutto l'output presente sulle code è stato scritto.\\
\const{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta
tutti i dati presenti sulla coda di input.\\
\hline
POSIX.1 prevede una serie di costanti che però servono solo per specificare le
velocità tipiche delle linee seriali:
\begin{verbatim}
- B0 B50 B75
- B110 B134 B150
- B200 B300 B600
- B1200 B1800 B2400
- B4800 B9600 B19200
- B38400 B57600 B115200
- B230400 B460800
+ B0 B50 B75 B110 B134 B150 B200
+ B300 B600 B1200 B1800 B2400 B4800 B9600
+ B19200 B38400 B57600 B115200 B230400 B460800
\end{verbatim}
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
\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
del terminale quest'ultimo non potrà funzionare: quando il terminale non è
di code di ingresso ed uscita; in generale si fa riferimento ad esse con il
nome di \textsl{discipline di linea}.
-
Lo standard POSIX prevede alcune funzioni che permettono di intervenire
direttamente sulla gestione di quest'ultime e sull'interazione fra i dati in
ingresso ed uscita e le relative code. In generale tutte queste funzioni
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.\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.}
+compreso fra 0.25 e 0.5.\footnote{lo standard 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 è
\textbf{Valore}& \textbf{Significato}\\
\hline
\hline
- \const{TCIFLUSH} & Cancella i dati sulla coda di ingresso. \\
+ \const{TCIFLUSH} & Cancella i dati sulla coda di ingresso.\\
\const{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\
\const{TCIOFLUSH}& Cancella i dati su entrambe le code.\\
\hline
\const{TCOOFF}& Sospende l'output.\\
\const{TCOON} & Riprende un output precedentemente sospeso.\\
\const{TCIOFF}& Il sistema trasmette un carattere di STOP, che
- fa interrompere la trasmissione dei dati dal terminale. \\
+ fa interrompere la trasmissione dei dati dal terminale.\\
\const{TCION} & Il sistema trasmette un carattere di START, che
fa riprendere la trasmissione dei dati dal terminale.\\
\hline
\end{table}
+
\subsection{Operare in \textsl{modo non canonico}}
\label{sec:term_non_canonical}
\label{sec:sess_pty}
Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia.
+% vedi man pts
-\subsection{La funzione \func{openpty}}
+
+\subsection{Allocazione dei terminale virtuali}
\label{sec:sess_openpty}
Qui vanno le cose su \func{openpty} e compagnia.
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "gapil"
-%%% End:
+% TODO le ioctl dei terminali
+% TODO trattare \func{posix\_openpt}
+
+
+
+% TODO materiale sulle seriali
+% vedi http://www.easysw.com/~mike/serial/serial.html
+% TODO materiale generico sul layer TTY
+% vedi http://www.linusakesson.net/programming/tty/index.php
+
% LocalWords: kernel multitasking dell'I job control BSD POSIX shell sez group
% LocalWords: foreground process bg fg Di waitpid WUNTRACED pgrp session sched
% LocalWords: SetTermAttr UnSetTermAttr cfsetispeed cfsetospeed cfgetispeed
% LocalWords: cfgetospeed quest'ultime tcsendbreak duration break tcdrain
% LocalWords: tcflush queue TCIFLUSH TCOFLUSH TCIOFLUSH tcflow action TCOOFF
-% LocalWords: TCOON TCIOFF TCION timer openpty
+% LocalWords: TCOON TCIOFF TCION timer openpty Window nochdir
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End:
\ No newline at end of file