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é