Re: Pipe [paip]

Top Page

Reply to this message
Author: Edgar Bonet
Date:  
To: ML Guilde
Subject: Re: Pipe [paip]
Salut.

Le vendredi 15 février, Frederic Mantegazza a écrit :
> [...] j'aimerais developper un
> front-end graphique (avec Qt) et envoyer les donnees a Gnuplot. Je sais
> que c'est faisable via un pipe, mais je voudrais faire la chose
> suivante :
>
> On lance le front-end graphique, et celui-ci ouvre en meme temps un
> shell Gnuplot, lequel est actif. Lorsqu'on lance une commande via la
> front-end, celle-ci s'ecrit dans le shell et s'execute. Si on tape la
> commande directement dans le shell, elle s'execute ausi (sans influence
> sur le front-end, ce qui serait, la, tres complexe).


Je ne crois que ça puisse se faire simplement avec des pipes, mais ça
doit bien se faire avec des pseudo-terminaux. Voici une proposition :

Ton front-end fait system("xterm -e multi") où multi est un petit
programme qui se charge de multiplexer la communication entre gnuplot,
xterm et ton front-end. multi ouvre une paire de pseudo-terminaux maître
(tty) et esclave (pty). Il forke. Le fils redirige stdin et stdout sur
le pty avant de faire exec("gnuplot"). Le père ouvre en plus un pipe
nommé dans $TMP ou /tmp pour communiquer avec le front-end. Il fait
communiquer ses stdin et stdout avec le tty, en envoyant en plus vers le
tty les commandes reçues par le pipe. Cf. le schéma ci-dessous :

,----------------------. ,-------------------------. ,--------------.
 |          pty(stdout)-+--+->tty       pty0(stdout)-+--+->tty0        |
 |  gnuplot             |  |      multi              |  |       xterm  |
 |          pty(stdin)<-+--+--tty---+---pty0(stdin)<-+--+--tty0        |

 `----------------------´  |        |                |  `--------------´
                           `-------pipe--------------´
                                    `------< GUI


Ici j'ai noté [pt]ty0 la paire de pseudo-terminaux ouverts par xterm.
Avec ça, gnuplot croira que tu as tapé au clavier les commandes que lui
envoie le GUI. Tu auras même l'écho des touches, tu pouras rappeler dans
le xterm avec <flèche haut> les commandes envoyées par le GUI, etc.

Remarque qu'il existe déjà un programme qui fait presque exactement ce
que fait l'hypothétique multi : il s'agit de script. Sauf que script
copie dans un fichier le flux qui va vers la droite au lieu d'injecter
dans le flux qui va vers la gauche ce qu'il lit dans un pipe.

Edgar.

-- 
Edgar Bonet                         Tel:    +33 476 881 096
Laboratoire Louis Néel -- CNRS      Mobile: +33 677 197 939
25 av. des Martyrs, BP 166          Fax:    +33 476 881 191
38042 Grenoble cedex 9, France      e-mail: bonet@???