7
votes

Comment créer une pseudo-tty pour la lecture de la lecture et l'écriture à l'entrée

J'utilise Fork () et ExecVP () pour apparaître un processus qui doit croire qu'il est connecté à un terminal interactif pour pouvoir fonctionner correctement.

Une fois engagée, je souhaite capturer toute la sortie du processus, tout aussi bien qu'avoir une entrée au processus.

Je soupçonne Psuedo-Ttys peut aider ici. Est-ce que quelqu'un a un extrait sur la façon de faire cela?


1 commentaires

C'est vraiment exactement ce que sont les pseudo-tytys. Je souhaite souvent que Windows ait une capacité similaire intégrée.


3 Réponses :


1
votes

Il y a un colis appelé "attendre" que vous devriez utiliser. Il utilise une langue de script appelée TCL (Tickle prononcé).

https://core.tcl-lang.org/expect/


2 commentaires

Bien que ce site Web ait l'air amateur. Attendez-vous depuis de nombreuses années, il s'agit donc d'un forfait solide.


Étant donné que l'OP commence par "J'utilise Fork () et Execvp () pour épargner un processus ..." Il est clair qu'ils veulent inclure cette fonctionnalité dans un programme existant, et non la réécrivez dans TCL à attendre.



6
votes

Vous voulez appeler Forkpty (). De la page man:

#include / * pour ouverte et fourchette * /

PID_T FORKPTY (INT * AMASTER, CHAR * NOM, STRÊME TERMIOS * TERMP, STRIT winsize * winp);

lien avec -lutil.

La fonction Forkpty () combine ouverte (), fourchette () et login_tty () à Créez un nouveau processus opérant dans un pseudo-terminal. La description du fichier Tor du côté maître du pseudo-terminal est retourné à Amaster, et le nom de fichier de l'esclave de nom s'il n'est pas nul. Le termp et Les paramètres WinP, sinon NULL, détermineront les attributs de terminaux et la taille de la fenêtre du côté esclave du pseudo-terminal.

Votre processus parent parle à l'enfant en lisant et en écrivant du descripteur de fichier que les magasins Forkpty dans "AMASTER" - Ceci s'appelle l'appareil Pseudo-terminal principal. L'enfant ne fait que parler à STDIN et à STDOUT, qui sont connectés au périphérique pseudo-terminal esclave.


2 commentaires

Forkpty () est sur Linux et Mac, mais pas par ex. Solaris ou Aix. Si vous souhaitez une portabilité, POSIX définit les fonctions POSIX_OPENPT (), PTSNAME (), Grandpt () et Déverrouiller ().


AYE C'est une norme BSD, héritée par Linux.



1
votes

Attendez-vous à ce que ait déjà été mentionné pour une utilisation via TCL, mais elle peut également être utilisée sans TCL par Traitement de la bibliothèque C et appeler l'API documenté ici


0 commentaires