IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[Named Pipe]Redirection de STDIN et STDOUT


Sujet :

Windows

  1. #1
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut [Named Pipe]Redirection de STDIN et STDOUT
    Bonjour,

    Avant de me mettre à coder cet aspect et après quelques recherches infructueuses , j'aurais voulu savoir si il est possible de rediriger SDTIN et STDOUT vers des "Named Pipes" qui aurait été créés par un autre processus.

    Le but est de rapidement modifier le code d'une application console qui interagit avec l'utilisateur. Celle-ci vérifierait à son lancement si les "named piped" existe, si c'est le cas, on redéfinit les flux standards, sinon on conserve ceux par défaut.

    Apparemment, il faudrait que je m'oriente vers la fonction dup() mais où je suis embêté, c'est que celle-ci prend en paramètre un entier et que CreateNamedPipe() retourne un handle... Donc je pense que cela ne fonctionnera pas, je me trompe?

    Donc est ce possible et si c'est la cas, de quelle façon dois je faire pour réaliser cela "simplement" car je voudrais éviter de mettre un mécanisme de ReadFile() et WriteFile(), à moins que je n'ai le choix...

    NB: Le choix de "pipe" est un choix de conception car je les utilise aussi lors de la création d'un autre processus via CreateProcess().

  2. #2
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Salut,

    Citation Envoyé par homeostasie Voir le message
    j'aurais voulu savoir si il est possible de rediriger SDTIN et STDOUT vers des "Named Pipes" qui aurait été créés par un autre processus.
    Si tes tubes nommés existent déjà, pourquoi utiliser CreateNamedPipe()?
    Quant à ta fonction dup(), je ne sais pas de quoi il s'agit.

    Cela dit, si tu souhaites obtenir un handle pour ton "pipe", il faut passer par CreateFile(), comme souvent d'ailleurs. Tu peux utiliser également CallNamedPipe() qui combine plusieurs fonctions, dont la précédente, pour établir une interaction aisée avec tes tubes nommés.

    Enfin, pour ce qui est de la redirection, il faut te tourner vers SetStdHandle() où les handles des entrée et sortie standard (STD_OUTPUT_HANDLE...) sont substitués par ceux des tubes.

    Voilà une vue assez synthétique de la chose qui te permettra d'aller de l'avant.

    enjoy;

  3. #3
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par maxim_um Voir le message
    Si tes tubes nommés existent déjà, pourquoi utiliser CreateNamedPipe()?
    Me suis peut être mal exprimé, je disais qu'un autre processus a créé précédement les tubes nommés.

    Citation Envoyé par maxim_um Voir le message
    Quant à ta fonction dup(), je ne sais pas de quoi il s'agit.
    C'est expliqué en partie ici.

    Citation Envoyé par maxim_um Voir le message
    Enfin, pour ce qui est de la redirection, il faut te tourner vers SetStdHandle() où les handles des entrée et sortie standard (STD_OUTPUT_HANDLE...) sont substitués par ceux des tubes.
    Ah, voici ce qui me manquait. Merci!

  4. #4
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    J'imagine que tu utilises Cygwin alors?

  5. #5
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Citation Envoyé par maxim_um Voir le message
    J'imagine que tu utilises Cygwin alors?
    J'utilise l'IDE Code:Blocks et MinGW comme compilateur.

  6. #6
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    J'ai franchement du mal à concevoir que les codes de ton lien compilent nativement sous mingw sans y avoir adjoint au préalable une lib de portage d'Unix.

    M'enfin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/04/2012, 19h16
  2. Réponses: 0
    Dernier message: 20/10/2008, 09h47
  3. Named Pipes sur vista
    Par Tosh dans le forum C++
    Réponses: 1
    Dernier message: 18/07/2007, 21h28
  4. Create named pipe
    Par albanovisch dans le forum C++
    Réponses: 3
    Dernier message: 06/07/2007, 09h07
  5. [wxPython] redirection des commentaires stderr/stdout
    Par Guigui_ dans le forum wxPython
    Réponses: 5
    Dernier message: 28/12/2005, 22h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo