Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2921 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Rediriger un flux de sortie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Rediriger un flux de sortie

n°1781320
xilebo
noone
Posté le 02-09-2008 à 11:24:49  profilanswer
 

Bonjour,
 
J'ai 2 applications A et B, B étant lancé par A via un fork(). B génère des logs sur stdout (printf etc...) et j'aimerai les récupérer dans mon application A. Je pense qu'il faut que j'utilise les fonctions close() dup() etc... pour rediriger le descripteur de fichier stdout de B, mais je n'arrive pas à voir comment procéder. J'aimerai dans l'idéal appeler une callback (avec en paramètre la chaine de caractère) à chaque fois que B génère un log. Est-ce possible ?
 
Si c'est possible (ce que je suppose) puis-je effectuer l'opération de A uniquement, ou ai-je besoin d'écrire du code du coté de B ?
 
Merci d'avance :)
 

mood
Publicité
Posté le 02-09-2008 à 11:24:49  profilanswer
 

n°1781325
theshockwa​ve
I work at a firm named Koslow
Posté le 02-09-2008 à 11:32:49  profilanswer
 

normalement, tu dois pouvoir récupérer les flu de sortie de B sans rajouter de code dedans via des redirections d'entrées sorties. Jette un coup d'oeil du côté des pipes

n°1781330
Taz
bisounours-codeur
Posté le 02-09-2008 à 11:41:07  profilanswer
 

ou fais un popen

n°1781331
xilebo
noone
Posté le 02-09-2008 à 11:42:46  profilanswer
 

Ah oui, exact  :o j'avais oublié le pipe.

n°1781333
xilebo
noone
Posté le 02-09-2008 à 11:45:17  profilanswer
 

Taz a écrit :

ou fais un popen


 
 
Je vais regarder si je peux exploiter la commande popen, actuellement je fais un fork() puis un execlp() derrière. Merci de l'info, je ne connaissais pas cette fonction :)

n°1781682
Gf4x3443
Killing perfection
Posté le 03-09-2008 à 01:04:01  profilanswer
 

xilebo a écrit :


Je vais regarder si je peux exploiter la commande popen, actuellement je fais un fork() puis un execlp() derrière. Merci de l'info, je ne connaissais pas cette fonction :)

 

Tu ne fais rien "a priori" dans B (du moins après le exec. Avant, oui).

 

Grosso merdo:
- tu crées une pipe
- tu fais un fork() pour créer un nouveau processus (les descripteurs sont hérités)
- suivant ce que tu veux faire (stdout de A vers stdin de B ou stdout de B vers stdin de A), tu close() un des deux bouts de la pipe (un bout dans le fils, un bout dans le père)
- tu as maintenant une pipe unidirectionnelle propre
- tu utilises dup2() (et pas dup(), vu que tu ne controles pas quel descripteur sera retourné via dup) pour remplacer les ressources pointées par les filedes de stdin/stdout par ceux de ta pipe
- tu closes les filedes de la pipe
- tu execve ton processus fils

 

Popen fait grosso modo la même chose, à ceci près que certaines implémentations utilisent des socket plutot que des pipe, et que popen permet de faire du bidirectionnel (tandis qu'une pipe, non).

 

Edit: à vérifier, toutes les implémentations de popen ne font pas du bidirectionnel :/


Message édité par Gf4x3443 le 03-09-2008 à 01:06:04

---------------
Petit guide Kerberos pour l'administrateur pressé

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Rediriger un flux de sortie

 

Sujets relatifs
Flux Rss/Gzippb avec la gestion des threads et le resultat sur la sortie std
[RESOLU] Recherche de Flux RSS[C#] récuperer un flux http
[Résolu][C]condition de sortie d'une boucle while = retour chariotAutoIt3 - affichage fenêtre et sortie d'erreur
comment récupérer le flux video d'une webcamProblème d'image background en CSS sortie d'Adobe...
requete flux xml avec curl[Apache]Rediriger Phpmyadmin en https
Plus de sujets relatifs à : Rediriger un flux de sortie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR