Piccole correzioni e link per openpty e affini
authorpiccardi <piccardi@truelite.it>
Fri, 18 Oct 2024 09:54:21 +0000 (11:54 +0200)
committerpiccardi <piccardi@truelite.it>
Fri, 18 Oct 2024 09:54:21 +0000 (11:54 +0200)
session.tex

index beb46bbe9bd6323e69ff37d04cfb605d0bd05193..7a77919662b2735e62c309ee752a8b4dc1c304be 100644 (file)
@@ -1352,8 +1352,8 @@ ricevuti impiegandoli opportunamente come comandi o come dati.
 Per capire le caratteristiche dell'I/O sui terminali occorre esaminare le
 modalità con cui esso viene effettuato. L'accesso, come per tutti i
 dispositivi, viene gestito dal kernel, ma per tutti i terminali viene
-utilizzata una architettura generica che si è schematizzata in
-fig.~\ref{fig:term_struct}.  
+utilizzata una architettura generica che si è schematizzata in maniera
+semplificata in fig.~\ref{fig:term_struct}.
 
 Ad ogni terminale sono sempre associate due code
 per gestire l'input e l'output, che ne implementano una bufferizzazione
@@ -1406,8 +1406,9 @@ descriptor che corrispondono ad un terminale, in caso contrario lo standard
 richiede che venga restituito un errore di \errcode{ENOTTY}.
 
 Per evitare l'errore, ed anche semplicemente per verificare se un file
-descriptor corrisponde ad un terminale, è disponibile la funzione
-\funcd{isatty}, il cui prototipo è:
+descriptor corrisponde ad un terminale (cosa che viene fatta da alcuni
+programmi quando richiedono l'immissione di una password), è disponibile la
+funzione \funcd{isatty}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{unistd.h}
@@ -1419,13 +1420,14 @@ descriptor corrisponde ad un terminale, è disponibile la funzione
   altrimenti, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{fd} non è un file descriptor valido.
-  \item[\errcode{EINVAL}] \param{fd} non è associato a un terminale (non
-    ottempera a POSIX.1-2001 che richiederebbe \errcode{ENOTTY}).
+  \item[\errcode{ENOTTY}] \param{fd} non è associato a un terminale (alcune
+    vecchie versioni del kernel restituiscono \errcode{EINVAL} che non
+    ottempera a POSIX.1-2001).
   \end{errlist}
 }
 \end{funcproto}
 
-Un'altra funzione per avere informazioni su un terminale è \funcd{ttyname},
+Una seconda funzione per avere informazioni su un terminale è \funcd{ttyname},
 che permette di ottenere il nome del file di dispositivo del terminale
 associato ad un file descriptor; il suo prototipo è:
 
@@ -1508,14 +1510,14 @@ essere in grado di aprire il terminale.
 I vari attributi associati ad un terminale vengono mantenuti per ciascuno di
 essi in una struttura \struct{termios} che viene usata dalle varie funzioni
 dell'interfaccia. In fig.~\ref{fig:term_termios} si sono riportati tutti i
-campi della definizione di questa struttura usata in Linux; di questi solo i
-primi cinque sono previsti dallo standard POSIX.1, ma le varie implementazioni
-ne aggiungono degli altri per mantenere ulteriori informazioni.\footnote{la
-  definizione della struttura si trova in \file{bits/termios.h}, da non
+campi della definizione di questa struttura usata in Linux;\footnote{la
+  definizione della struttura si trova in \file{bits/termios-struct.h}, da non
   includere mai direttamente; Linux, seguendo 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 indicare la
-  disciplina di linea.}
+  disciplina di linea.} di questi solo i primi quattro flag ed il successivo
+\texttt{c\_cc} sono previsti dallo standard POSIX.1, ma le varie
+implementazioni ne aggiungono degli altri per mantenere ulteriori informazioni.
 
 \begin{figure}[!htb] 
   \footnotesize \centering
@@ -1621,26 +1623,28 @@ modificare i bit su cui non si interviene.
 \end{table}
 
 Il primo flag, mantenuto nel campo \var{c\_iflag}, è detto \textsl{flag di
-  input} e controlla le modalità di funzionamento dell'input dei caratteri sul
-terminale, come il controllo di parità, il controllo di flusso, la gestione
-dei caratteri speciali; un elenco dei vari bit, del loro significato e delle
-costanti utilizzate per identificarli è riportato in
-tab.~\ref{tab:sess_termios_iflag}.
-
-Si noti come alcuni di questi flag (come quelli per la gestione del flusso)
-fanno riferimento a delle caratteristiche che ormai sono completamente
-obsolete; la maggior parte inoltre è tipica di terminali seriali, e non ha
-alcun effetto su dispositivi diversi come le console virtuali o gli
-pseudo-terminali usati nelle connessioni di rete.
+  input} e controlla le modalità con cui viene gestita l'immissione dei
+caratteri sul terminale, per funzionalità come il controllo di parità, il
+controllo di flusso, la gestione dei caratteri speciali; un elenco dei vari
+bit che compongono il flag, del loro significato e delle costanti utilizzate
+per identificarli è riportato in tab.~\ref{tab:sess_termios_iflag}.
+
+Si noti come alcuni di questi flag (come quelli relativi al controllo di
+gestione del flusso) fanno riferimento a delle caratteristiche dei terminali
+che ormai sono completamente obsolete; la maggior parte inoltre è tipica dei
+terminali seriali, e non ha alcun effetto su dispositivi diversi come le
+console virtuali sullo schermo o gli pseudo-terminali usati nelle connessioni
+di rete.
 
 Il secondo flag, mantenuto nel campo \var{c\_oflag}, è detto \textsl{flag di
-  output} e controlla le modalità di funzionamento dell'output dei caratteri,
-come l'impacchettamento dei caratteri sullo schermo, la traslazione degli a
-capo, la conversione dei caratteri speciali; un elenco dei vari bit, del loro
-significato e delle costanti utilizzate per identificarli è riportato in
-tab.~\ref{tab:sess_termios_oflag}, di questi solo \const{OPOST} era previsto
-da POSIX.1, buona parte degli altri sono stati aggiunti in POSIX.1-2001,
-quelli ancora assenti sono stati indicati esplicitamente.
+  output} e controlla le modalità con cui viene gestito il funzionamento dei
+caratteri scritti sul terminale, come l'impacchettamento dei caratteri sullo
+schermo, la traslazione degli a capo, la conversione dei caratteri speciali.
+Un elenco dei vari bit, del loro significato e delle costanti utilizzate per
+identificarli è stato riportato in tab.~\ref{tab:sess_termios_oflag}, di
+questi soltanto \const{OPOST} era previsto da POSIX.1, buona parte degli altri
+flag sono stati aggiunti in POSIX.1-2001, quelli ancora assenti sono stati
+indicati esplicitamente.
 
 \begin{table}[!htb]
   \footnotesize
@@ -1698,17 +1702,19 @@ quelli ancora assenti sono stati indicati esplicitamente.
 \end{table}
 
 Si noti come alcuni dei valori riportati in tab.~\ref{tab:sess_termios_oflag}
-fanno riferimento a delle maschere di bit; essi infatti vengono utilizzati per
-impostare alcuni valori numerici relativi ai ritardi nell'output di alcuni
-caratteri: una caratteristica originaria dei primi terminali su telescrivente,
-che avevano bisogno di tempistiche diverse per spostare il carrello in
-risposta ai caratteri speciali, e che oggi sono completamente in disuso.
-
-Si tenga presente inoltre che nel caso delle maschere il valore da inserire in
-\var{c\_oflag} deve essere fornito avendo cura di cancellare prima tutti i bit
-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:
+fanno riferimento non a bit singoli, ma a delle maschere di bit; essi infatti
+vengono utilizzati per impostare alcuni valori numerici relativi ai ritardi da
+applicare alla scrittura sul terminale di alcuni caratteri: si tratta di una
+caratteristica originaria dei primi terminali su telescrivente, che avevano
+bisogno di tempistiche diverse per spostare il carrello in risposta ai
+caratteri speciali, e che oggi sono completamente in disuso.
+
+Si tenga presente inoltre che nel caso si utilizzi una di queste maschere di
+bit il valore da inserire in \var{c\_oflag} deve essere fornito avendo cura di
+cancellare prima tutti i bit 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:
 
 \includecodesnip{listati/oflag.c}
 
@@ -1911,8 +1917,8 @@ Oltre ai vari flag per gestire le varie caratteristiche dei terminali,
 impostare i caratteri speciali associati alle varie funzioni di controllo. Il
 numero di questi caratteri speciali è indicato dalla costante \constd{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.}
+altriin Linux il valore della costante è 32, anche se i caratteri
+effettivamente definiti sono solo 17.
 
 \begin{table}[!htb]
   \footnotesize
@@ -2187,7 +2193,8 @@ 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
+     B19200   B38400   B57600   B115200  B230400  B460800  B460800
+     B500000  B576000  B921600  B1000000 B1152000 B1500000 B2000000
 \end{verbatim}
 
 Un terminale può utilizzare solo alcune delle velocità possibili, le funzioni
@@ -2489,7 +2496,6 @@ Da fare.
 
 Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia.
 % vedi man pts
-% vedi 
 
 
 \subsection{Allocazione dei terminali virtuali}
@@ -2503,6 +2509,11 @@ Qui vanno le cose su \func{openpty} e compagnia.
 % vedi http://lwn.net/Articles/688809/,
 % http://man7.org/linux/man-pages/man3/ptsname.3.html
 
+% vedi
+% https://stackoverflow.com/questions/77231881/how-to-turn-a-pty-shell-into-a-remote-shell
+% https://gist.github.com/zmwangx/2bac2af9195cad47069419ccd9ee98d8
+% https://www.uninformativ.de/blog/postings/2018-02-24/0/POSTING-en.html 
+% https://cpp.hotexamples.com/it/examples/-/-/openpty/cpp-openpty-function-examples.html
 
 % TODO materiale sulle seriali
 % vedi http://www.easysw.com/~mike/serial/serial.html