Il article si parla è eccellente, e difficile da migliorare, ma è piuttosto tecnico. Cercherò di dare una spiegazione tecnica meno (portare con me, guru di Unix!)
Un tubo è solo un canale dati unidirezionale: può essere scritto solo su un lato, e leggo dall'altro. Per la comunicazione inter-processo bidirezionale è necessario sempre due pipe. I tubi sono eccellenti per spostare i bit in giro, ma non per molto altro ancora.
A pty (pseudoterminale) può essere letto e scritto su entrambe le estremità, ma è molto più di un semplice canale di dati bidirezionale. Per capirlo, è utile dare un'occhiata ad un vero terminale: ad una estremità c'è un processo che legge i tasti e invia caratteri ad un teletype o schermo. Dall'altra parte c'è un vero umano che bussa alla tastiera e fissa lo schermo sopra menzionato. Solo una estremità ha un descrittore di file, l'altra estremità è solo un connettore e un cavo.
Storicamente, i terminali hanno sviluppato molti attributi che possono essere controllati dai programmi in esecuzione su di essi (come "modalità eco" o "modalità canonica", vedere termios (3)
) Inoltre, un terminale può consentire all'utente (tramite il metodo sopra - connettore e cavo indicati) invia segnali che possono essere utilizzati per il "controllo del lavoro", ad es digitando CTRL-Z per mettere un lavoro in primo piano in background.
Un pty
è come un vero e proprio terminale dove entrambe le estremità sono descrittori di file:
slave fine si comporta esattamente come un vero terminale: un processo che ha un descrittore di fine slave ("processo inferiore") può leggere e scrivere su di esso, ma anche impostare gli attibutes del terminale come la modalità echo o il carattere di interrupt (ad es. CTRL + C). Di solito non si rende nemmeno conto che non è collegato a uno schermo e una tastiera reali.
fine maestro sembra più una tastiera e telescrivente per l'uso, non per gli esseri umani, ma da altri processi: qualsiasi processo che ha aperto alla fine il master può scrivere su di essa, e riceveranno eco (ma solo se il processo inferiore ha impostato l'attributo ECHO
sullo slave). Può anche (sulla maggior parte dei moderni) controllare la sessione in cui lo slave è il suo terminale di controllo), ad es. inviando CTRL + Z.
Per comprendere ciò che un terminale di controllo è, è ancora utile pensare lo scenario in cui un vero utente è connesso a un terminale reale.L'utente può avviare una "sessione", ovvero una raccolta di processi, alcuni dei quali in lavori in primo piano, altri in background.
Per evitare il caos, un terminale di controllo (ovvero la struttura del kernel ad esso associata) tiene traccia di quali processi sono in un lavoro in primo piano o in background e quali processi sono autorizzati a leggere e scrivere su di esso. Ogni volta che un processo tenta qualcosa di illegale (come un processo in background dal terminale di controllo) l'operazione fallirà (con EIO
) e l'intero lavoro verrà quindi arrestato dal kernel (usando il segnale SIGTTIN
)
Questo dimostra che, solo come con un vero terminale, solo il terminale slave di una pty può essere un terminale di controllo e che il concetto ha senso solo su un sistema Unix che supporta il controllo del lavoro (qualsiasi sistema Unix, al giorno d'oggi)
La mia domanda è negativa ? Non vedo una risposta e mi chiedevo se ho chiesto qualcosa di sbagliato – kprincipe
No, la tua domanda è buona (ricordo che me ne sono chiesto anch'io). È molto ampio, tuttavia, e difficile da rispondere non tecnicamente, mentre l'articolo che citi è già molto buono. Proverò a dare una risposta sotto –
Per i PTY, vedi anche http://en.wikipedia.org/wiki/Pseudo_terminal – nos