Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Récupérer le flux de données en sortie d'un programme C

9 réponses
Avatar
GG²
Bonjour,


Je souhaiterais connaître une méthode pour pouvoir récupérer le flux
d'informations issues d'un programme pour pouvoir le réinjecter dans un
autre.
Je m'explique: un soft en C génére plusieurs fichiers, et un flux texte à
l'écran. Je voudrai récupérer ce flux en "live" (pendant que le programme
continue de tourner) afin de l'envoyer dans une socket, ou pipe, pour une
utilisation directe via un autre programme, le tout en temps réel.

Existe-t-il un moyen de faire cela sous Unix/Linux ?

Merci d'avance de votre réponse !

9 réponses

Avatar
Pascal Bourguignon
"GG²" writes:

Bonjour,


Je souhaiterais connaître une méthode pour pouvoir récupérer le flux
d'informations issues d'un programme pour pouvoir le réinjecter dans un
autre.
Je m'explique: un soft en C génére plusieurs fichiers, et un flux texte à
l'écran. Je voudrai récupérer ce flux en "live" (pendant que le programme
continue de tourner) afin de l'envoyer dans une socket, ou pipe, pour une
utilisation directe via un autre programme, le tout en temps réel.

Existe-t-il un moyen de faire cela sous Unix/Linux ?


Comment l'envoit-il à l'écran? Est-ce via un émulateur de terminal
comme xterm ou directement comme une bitmap dans une fenêtre X?

Dans le premier cas, on peut envisager une redirection:

pgm > output

mais il est possible que le programme s'amuse à ouvrir /dev/tty auquel
cas c'est plus difficile de rediriger.

Dans le second cas, en supposant que le programme utilise la primitive
X pour _dessiner_ du texte, on doit pouvoir patcher un serveur X pour
logger les sorties de texte. Mais rien ne le garanti: le programme
peut parfaitement dessiner les lettres pixel par pixel ou utiliser des
jpeg pour afficher des titres, etc...

Conclusion: le mieux c'est de:

1- lire la doc du programme, il y a peut être une option pour
l'utiliser en mode batch et envoyer la sortie dans un fichier
au lieu de l'écran.

2- modifier le source du programme pour en faire un programme
batch au lieu d'un programme GUI de merde. D'ailleurs,
avec un peut de chance, c'est un programme unix construit
à partir d'un "moteur" CLI/batch normal et une couche
GUI disticte: on peut alors utiliser directement le moteur.


Bonne lecture de fond:

The Art of Unix Programming
Eric S. Raymond
http://catb.org/~esr/writings/taoup/html/
(en particulier, chapitre 11 Interfaces)


--
__Pascal Bourguignon__ http://www.informatimago.com/
The world will now reboot; don't bother saving your artefacts.

Avatar
GG²
Il s'agit d'un simple flux texte.
Mais est-il possible d'utiliser ce flux redirigé en temps réel ?
Avatar
nicolas
GG² wrote:
Il s'agit d'un simple flux texte.
Mais est-il possible d'utiliser ce flux redirigé en temps réel ?


man pipe ;)

ca envoit logiquement en flux tendu

Avatar
nicolas
nicolas wrote:
GG² wrote:

Il s'agit d'un simple flux texte.
Mais est-il possible d'utiliser ce flux redirigé en temps réel ?


man pipe ;)

ca envoit logiquement en flux tendu
et man dup / dup2 ...



Avatar
GG²
Je n'ai seulement accès aux sources du deuxième programme.
Est il qd même possible d'utiliser ces fonctions ?
Avatar
Pascal Bourguignon
"GG²" writes:

Je n'ai seulement accès aux sources du deuxième programme.
Est il qd même possible d'utiliser ces fonctions ?


premier-programme | second-programme

^
|
pipe


--
__Pascal Bourguignon__ http://www.informatimago.com/
The world will now reboot; don't bother saving your artefacts.

Avatar
Jogo
Le 10 déc. 2004, Pascal Bourguignon a écrit dans fr.comp.os.unix :

premier-programme | second-programme

^
|
pipe


Ou si vous souhaitez gardez l'affichage intact :
man tee
man mkfifo

Avatar
nicolas
GG² wrote:
Je n'ai seulement accès aux sources du deuxième programme.
Est il qd même possible d'utiliser ces fonctions ?




bien sur :)

man execve

Avatar
DIG
On Thu, 9 Dec 2004 22:19:16 +0100, wrote:

Il s'agit d'un simple flux texte.
Mais est-il possible d'utiliser ce flux redirigé en temps réel ?


Vous pouvez essayer ``tee'':

,--[ man tee ]--
| tee - read from standard input and write to standard output and files
| [...]
`--[ ]--


A plus tard,

--
DIG (Dmitri I GOULIAEV)
Aahz's law: The best way to get information on usenet is
not to ask a question, but to post the wrong information.