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

C Discussion :

Les pipes


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut Les pipes
    Bonjour,

    je souhaiterais, de la meme facon qu'un shell unix, faire communiquer entre eux deux (ou plus) programmes, via des pipes. En clair pouvoir par exemple realiser un truc du style :
    J'ai compris qu'un pipe etait un tube reliant deux processus, et qu'il etait possible d'ecrire dans un tube et que l'autre processus puisse lire a la sortie. Cependant comment faire en sorte que mon "ls -l" (lancer dans un processus avec execve()) puisse envoyer ce qu'il a afficher et que le second programme se serve de ce qu'il vient de recevoir en guise d'entree standard ?

    Je vous remercie,
    bonne soiree
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  2. #2
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Utilise popen, ou alors, deuxieme solution, (si tu veux rester portable), ton premier processus doit ecrire sa sortie dans un fichier, et le second prnedre ce meme fichier comme entree : utilise freopen pour cela.

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Salut

    En fait le probleme c'est que je ne suis pas maitre des programmes en question, etant donne qu'il s'agit de faire des execve().
    Il n'est pas possible de faire passer la sortie et l'entree standard d'un programme dans un pipe ?

    ++
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  4. #4
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Bon a force de perseverance ca progresse, j'ai fait un petit programme tout simple pour tester la commande ls -l | wc -l mais il y a un petit probleme, le wc -l ne lit rien ... Pourtant quand j'affiche l'entree standard ca affiche bien que le resultat de ls -l a ete transmit

    Vous pouvez me dire d'ou vient le probleme ?

    Merci

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    extern	char	**environ;
     
    char	*get_next_line(int fd);
     
    int	main()
    {
      int	tube [2];
      int	pid;
      char	*line;
     
      if ((pipe(tube) == -1) || ((pid = fork ()) == -1))
        printf("error\n");
     
      if (pid > 0)
        {
          wait(NULL);
          close (0);
          dup(tube[0]);
          while (line = get_next_line(0))
    	printf("%s\n", line);
          execl("/usr/bin/wc", "wc", "-l", NULL);
        }
      else
        {
          close (1);
          dup(tube[1]);
          execl("/bin/ls", "ls", "-la", NULL);
        }
      return (0);
    }
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

  5. #5
    Membre chevronné
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par défaut
    Bon a force de recherche et de perseverance je suis arrivé a des résultats plus ou moins corects, je reussirai surement paufiner le tout.

    Merci ++
    Testez le forum Fire Soft Board, un forum libre, gratuit et français.

    Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.

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

Discussions similaires

  1. changer les Pipe bufferSize
    Par Grizli dans le forum Administration système
    Réponses: 0
    Dernier message: 08/08/2009, 07h10
  2. questions sur les pipes ?
    Par laracroft87 dans le forum Linux
    Réponses: 16
    Dernier message: 02/05/2009, 20h57
  3. [Powershell] traiter les pipe dans un csv
    Par dferot dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 16/12/2008, 09h52
  4. Problèmes avec les pipes
    Par awabi dans le forum Langage
    Réponses: 4
    Dernier message: 10/10/2008, 18h24
  5. programme en C sur les pipes
    Par morpion_35 dans le forum C
    Réponses: 1
    Dernier message: 24/03/2007, 09h49

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