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

  FORUM HardWare.fr
  Programmation
  C

  Comment replacer la sortie standard sur l'écran ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment replacer la sortie standard sur l'écran ?

n°1697234
abaddon200​2
Posté le 04-03-2008 à 22:31:05  profilanswer
 

Bonjour,
 
dans le cadre de réalisation d'un mini shell, je dois pouvoir modifier le descripteur de la sortie, erreur et entrée standard.
Mon problème est identique dans les trois cas. Prenons par exemple la sortie standard. J'arrive à la redirigier, mais une fois mon traitement achevé, comment la refaire aller sur l'écran ?
 
J'ai trouvé un code classique pour la rediriger :
 

Code :
  1. int fdesc;   /* descripteur d'entrée/sorties pour les redirections */
  2. int result;   /* résultat pour la duplication des E/S */
  3. fdesc = open("FichierPourLaSortie", O_CREAT | O_TRUNC | O_WRONLY, 0644);
  4. result = dup2(fdesc, STDOUT_FILENO); /* modifie la sortie standard */
  5. if(result < 0) {
  6.  fprintf(stderr, "erreur lors de la redirection de stdout. Arrêt de la commande.\n" );
  7.  return -1;
  8. }
  9. close(fdesc); /* ferme le descripteur inutilisé */
  10. /* ici je peux m'amuser à écrire dans FichierPourLaSortie */
  11. /* une fois mon traitement terminé, comment retrouvé stdout sur l'écran ?? */
  12. fflush(NULL);


Message édité par abaddon2002 le 04-03-2008 à 22:40:33
mood
Publicité
Posté le 04-03-2008 à 22:31:05  profilanswer
 

n°1697241
abaddon200​2
Posté le 04-03-2008 à 23:02:15  profilanswer
 

Je crois avoir trouvé une solution, mais je ne sais pas si c'est propre ?
 

Code :
  1. int fdesc;   /* descripteur d'entrée/sorties pour les redirections */
  2. int result;   /* résultat pour la duplication des E/S */
  3. int saveDesc[3]; /* sauvegarde de descripteur [0] pour l'entrée [1] pour la sortie [2] pour l'erreur */
  4. saveDesc[1] = dup(STDOUT_FILENO);
  5. fdesc = open("FichierPourLaSortie", O_CREAT | O_TRUNC | O_WRONLY, 0644);
  6. result = dup2(fdesc, STDOUT_FILENO); /* modifie la sortie standard */
  7. if(result < 0) {
  8.  fprintf(stderr, "erreur lors de la redirection de stdout. Arrêt de la commande.\n" );
  9.  return -1;
  10. }
  11. close(fdesc); /* ferme le descripteur inutilisé */
  12. /* je m'amuse ici */
  13. /* une fois terminé je fais cela : */
  14. fflush(NULL); /* vide les buffers */
  15. dup2(saveDesc[1], STDOUT_FILENO);
  16. close(saveDesc[1]);


Message édité par abaddon2002 le 04-03-2008 à 23:02:52
n°1697467
Taz
bisounours-codeur
Posté le 05-03-2008 à 11:45:38  profilanswer
 

euh je comprends pas ce que tu veux faire: tu fork, tu changes stdin, stdout, etc comme tu veux, tu exec et basta. Ca n'impacte pas les descripteurs de ton shell.

n°1697825
abaddon200​2
Posté le 05-03-2008 à 18:43:39  profilanswer
 

Salut, euh si ça a un impacte sur mon shell. Mon shell c'est mon programme en C que je suis entrain de coder. En fait je voudrais changer les descripteurs du processus fils uniquement, là ma solution est plus "brutale" car elle change aussi celle du père. c'est pour ça que lorsque j'exécutais une commande, à son retour, le descripteur stdout restait dans le fichier. Ma solution proposée rétabli ce problème.
 
Mais ma question est : comment ne changer que les descripteurs du fils ?

n°1697972
matafan
Posté le 06-03-2008 à 09:40:02  profilanswer
 

abaddon2002 a écrit :

Mais ma question est : comment ne changer que les descripteurs du fils ?


Et bien tu fais le changement dans le fils :pt1cable:

n°1698111
Taz
bisounours-codeur
Posté le 06-03-2008 à 11:40:12  profilanswer
 

abaddon2002 a écrit :

Salut, euh si ça a un impacte sur mon shell. Mon shell c'est mon programme en C que je suis entrain de coder. En fait je voudrais changer les descripteurs du processus fils uniquement, là ma solution est plus "brutale" car elle change aussi celle du père. c'est pour ça que lorsque j'exécutais une commande, à son retour, le descripteur stdout restait dans le fichier. Ma solution proposée rétabli ce problème.
 
Mais ma question est : comment ne changer que les descripteurs du fils ?


bah tu forks


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

  Comment replacer la sortie standard sur l'écran ?

 

Sujets relatifs
[PPC] Ecran tactile sous windows mobile 6 sdk et VS2005Récupérer la sortie d'un appli windows-snmp
adapter l'arrière plan à la taille de l'écran ?Basculer sortie vidéo DVI en SVHS / Changer résolution
Sortie vers fenetre MS-DOSLire a partir de l'ecran en PL/SQL
Aucune sortie console, JRE1.6.0_1/EclipseMode plein écran sous vista
Scripts VBS + DOS - sortie dans un fichier de logsPassage en Plein ecran de wmp sur internet, comment faire?
Plus de sujets relatifs à : Comment replacer la sortie standard sur l'écran ?


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