Programmation Système Linux

Résolu
salvio3223 Messages postés 5 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 31 décembre 2004 - 30 déc. 2004 à 02:30
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006 - 31 déc. 2004 à 12:04
Bonjour bonjour.
Je souhaitais simplement demander si il est possible (je pense lol) de copier le résultat de l'execution de commande sur la sortie standard dans un fichier depuis un programme ( copier pas rediriger lol ).

Je m'explique : j'ai un petit programme qui récupère des commandes systèmes écrites dans un mail, je fais tout plein d' execvp et donc le résultat s'affiche sur la sortie standard ( normal me direz vous ).
Et j'aurai besoin d'avoir une copie de ce resultat dans un fichier.
J'y arrive en redirigeant la sortie standard dans un fichier à l'aide d'un "dup2", mais du coup j'ai plus rien sur la dite sortie.Voilà si qq'un connait le pb et a une solution ou une idée je serai grandement reconnaissant.

4 réponses

plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
30 déc. 2004 à 19:35
Salut,

plus simple, moins ambitieux, utiliser la commande tee :
$ ls | tee ls.txt
affiche le résultat de ls sur la sortie standard, et dans le fichier ls.txt
$ ps | tee -a ls.txt
affiche le résultat de ps sur la sortie standard, et à la fin du fichier ls.txt (option -a)
3
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
30 déc. 2004 à 11:22
Si je me souviens bien (ca fait longtemps que je n ai pas fait ce genre de code), la solution est de creer un pipe (ou tube en bon francais), de faire un fork() et dans le processus fils dont on a remplace l'entree et la sortie standard par les extremites du pipe executer le programme par exexvp() par exemple.

Ceci permet de controler l entree et la sortie standard d un programme, ce qui peut etre utile pour mettre en place un systeme de plugins. Mais dans ton cas ca te permet d avoir un controle sur la sortie standard et donc de l ecrire dans un fichier ET de l ecrire sur le terminal.

Il y a peut etre plus simple mais cette methode fonctionne.
0
salvio3223 Messages postés 5 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 31 décembre 2004
30 déc. 2004 à 19:43
Merci bcp.Pour la méthode avec le pipe, j'ai essayé mais le pb c'est que je n'arrive pas à avoir les deux en même temps(affichage + écriture dans un fichier).Mais je vais continuer à chercher merci.
Sinon avec la commande tee ca marche, c'est pas exactement comme je l'aurai imaginé mais cela fonctionne et ca mise en place dans le programme n'est pas ( trop :) ) complexe.
Merci bcp à vous pour vos conseils.
0
MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
31 déc. 2004 à 12:04
A je ne connaissait pas cette commande. Comme quoi, on en apprend tout les jours (je suis tres loin d etre un pro du shell...). :)
0
Rejoignez-nous