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

Linux Discussion :

pipe stdin stdout


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut pipe stdin stdout
    bonjour à tous,

    Je travvaille en C sur linux
    le but de mon programme est de créer un 2 pipes vers un programme de façon a ce que ce programme lise des données sur stdin et renvois des données sur stdout
    j'ai réussit dans le cas ou je n'ai qu'une trame a envoyé et ça se complique lorsque j'en envois plusieurs voila les 2 programme que j'ai écrit

    le programme qui recoit par stdin et renvois par stdout
    je l'ai nommé readStd

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int main ()
    {
      //receive message data 
      char inbuff[10000];
     
      // receive the message though stdin
     while (fgets (inbuff, 10000, stdin) != NULL)
      {
        fprintf (stderr, "bien recu %s\n", inbuff);
        fprintf (stdout, "bien recu %s\n", inbuff);
      }
      return 0;
    }
    le programme qui crée les pipes :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    static int aleatoire (int maximum)
    {
        double d;
        d = (double) maximum * rand();
        d = d / (RAND_MAX + 1.0);
        return ((int) d);
    }
     
    int main (int argc, char * argv[])
    {
        int tube_1[2];
        int tube_2[2];
        if ((pipe(tube_1) != 0) || (pipe(tube_2) != 0))
          return -1;
        switch (fork()) {
          case -1 :
           close(tube_1[0]); close(tube_1[1]);
            close(tube_2[0]); close(tube_2[1]);
          return -1;
          case 0 : 
            close(tube_1[1]);
            close(tube_2[0]);
            dup2(tube_1[0], STDIN_FILENO);
            close(tube_1[0]);
            dup2(tube_2[1], STDOUT_FILENO);
            close(tube_2[1]);
            execv ("readStd", NULL);
            exit(EXIT_SUCCESS);
          default :
            close(tube_1[0]);
            close(tube_2[1]);
     
            char trameIP[256] = "";
     
            while(1) 
            {
              int attente = 1000000*aleatoire(5);
              sprintf (trameIP, "trame à envoyé %d\n", attente);
              fprintf (stderr, "trame à envoyé %d\n", attente);
     
              write(tube_1[1], trameIP, strlen(trameIP)+1);
              usleep(attente);
            }
        }
       return 0;
    }
    j'arrive a recoir le premier message mais pas les suivants et je comprends pas ce que je fait de mal
    si quelqu'un a une piste merci

    edit:
    je précise que les stderr sont la uniquement pour avoir une sortie et que je ne gère pas les stdout pour le moment j'attends de gérer les stdin d'abords correctement

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Oui alors désolé d'avoir fait perdre du temps à tous ceux qui ont lu ce post
    l'erreur est absolument bête je ne sais pas ou j'ai copié ça
    en fait le +1 est de trop dans cette expression

    write(tube_1[1], trameIP, strlen(trameIP)+1);

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

Discussions similaires

  1. [Named Pipe]Redirection de STDIN et STDOUT
    Par homeostasie dans le forum Windows
    Réponses: 5
    Dernier message: 22/04/2009, 20h42
  2. Redirection stdin / stdout
    Par Neitsa dans le forum Linux
    Réponses: 3
    Dernier message: 17/02/2007, 15h57
  3. Code Win32 vers Linux (stdin/stdout)
    Par MonsieurAk dans le forum Linux
    Réponses: 2
    Dernier message: 26/04/2006, 17h27
  4. flux stdin/stdout [2 questions]
    Par MonsieurAk dans le forum C
    Réponses: 3
    Dernier message: 20/12/2005, 16h18
  5. descripteur stdin stdout
    Par discogarden dans le forum Réseau
    Réponses: 10
    Dernier message: 08/01/2003, 23h25

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