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 :

Les tubes (pipes)


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 25
    Points
    25
    Par défaut Les tubes (pipes)
    J'ai un programme qui affiche hello world :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
    
    int main(void)
    {
        printf("Hello world.\n");
        return 0;
    }
    Je veux ensuite exécuter ce programme depuis un autre (CreateProcess) en redirigeant sa sortie standard dans un tube (pipe) anonyme (à la limite, même dans un bête fichier sur disque) mais je n'arrive pas. J'ai également essayé avec SetStdHandle mais ça ne marche pas. L'exemple dans MSDN utilise WriteFile pour écrire sur la sortie standard, mais je veux conserver mon bon vieux printf. Pouvez-vous me donner un exemple bien complet s'il vous plaît ? Ou des pistes si c'est trop demandé. Je vous remercie d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 393
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 393
    Points : 20 496
    Points
    20 496
    Par défaut
    Mais pourquoi s'obstiner à utiliser bêtement et stupidement printf ?
    Si le MSDN dit CreateFile et WriteFile c'est parce que c'est le moyen essentiel pour faire des "pipes"
    Sous Windows il faut oublier ce qui se fait sous Linux c'est pas les mêmes OS !
    C'est pour faire du code portable c'est ça ?
    Tu ne peux pas faire du code portable en programmation win32 c'est pas possible parce qu'il ya les spécifités de l'OS..
    Linux/Unix et printf c'est console, la win32 c'est aussi console mais interface graphique....

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Points : 168
    Points
    168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // prog1.c
    // programme qui sera execute par prog2
    
    #include <stdio.h>
    
    int main(void)
    {
      printf("Hello World !\n");
      return 0;         
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // prog2.c
    // programme qui execute prog1
    
    #include <stdio.h>
    
    int main(void)
    {
      FILE *p;
      char  buf[80];
      
      if((p = popen("prog1.exe", "r")))
      {
        while(fgets(buf, sizeof buf, p))
          printf("%s", buf);
    
        pclose(p);
      }         
      return 0;
    }

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est que le système d'exploitation Windows est constitué de plusieurs sous systèmes dont le sous système console (qui est l'environnement d'exécution des applications consoles) et le sous système "Windows" (qui est l'environnement d'exécutions des applications "fenêtrées"). Certaines fonctions sont réservées uniquement à l'usage des applications consoles et d'autres aux applications fenêtrées ...

    Entre applications consoles, l'exemple que t'a donné magma² est bon (à part le fait que sous Windows, il est recommandé d'utiliser les noms _popen et _pcolse à la place de popen et pclose, mais ce sont les mêmes bien sûr. Voir MSDN). Dans une application "Windows", il faut utiliser CreatePipe (ou NamedPipe ...), SetStdHandle, etc. A noter qu'une application console peut créer une fenêtre et une application "Windows" peut créer une console ...

Discussions similaires

  1. LES TUBES (Pipe)
    Par ould64 dans le forum Linux
    Réponses: 2
    Dernier message: 19/04/2008, 15h36
  2. les tubes en c++
    Par kobton dans le forum C++
    Réponses: 5
    Dernier message: 24/03/2008, 12h05
  3. Exercice en c sur les forks+Pipe+exec
    Par Elendhil dans le forum Linux
    Réponses: 6
    Dernier message: 07/11/2007, 19h32
  4. Réponses: 5
    Dernier message: 05/01/2007, 21h26
  5. Probleme avec les tubes
    Par L4BiN dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 28/07/2006, 10h44

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