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 :

problème de pipe ?


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 65
    Points : 35
    Points
    35
    Par défaut problème de pipe ?
    slt tout le monde :
    encore j'insiste sur le point des pipes qu'on peux les realiser a l'aide d'un seul tableau tube mai a chaque fois il aut ecrire de dans . ou lire de ce dernier
    voici ce code mais j'ai besoin d'une explication pourquoi ça pas marche?? essaié par exemple avec la commande ls -l|wc d'ailleur si vous remarqué il n'entre pas dans le 2ieme if ou il y' a des *******
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
      #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include<string.h>
    main(void)
    {
    char commande[80];
    char *copie,*buffer,*tranche;
    int tube[2];
    int p=0;
    int t=0;
    char *file=NULL;
    char *argv[10];
    char *B=NULL;
    char *res=NULL;
    char *comup=NULL;
    if (pipe(tube) == 1)
    syserr("pipe");
    printf("entrer des commandes en pipe\n");
    gets(commande);
    copie= strdup(commande);
    tranche = strtok_r(copie,"|",&buffer);
    while (tranche != NULL)
    {
    switch (fork())
    {
    case 1:
    syserr("fork");
    case 0:
    if (p!=0)
    {
    if (close(0) == 1)
    syserr("close3");
    if (dup(tube[0]) != 0)
    syserr("dup3");
    if (close(tube[0]) == 1
    || close(tube[1]) == 1)
    syserr("close4");
    while (wait(NULL) != 1);
    }
    if (strtok_r(NULL,"|",&buffer) != NULL)  *********
    {
    if (close(1) == 1)
    syserr("close");
    if (dup(tube[1]) != 1)
    syserr("dup");
    if (close(tube[0]) == 1
    || close(tube[1]) == 1)
    syserr("close2");
    }
    comup = strdup(tranche);
    res = strtok_r(comup," ",&B);
    file = res;
    if (res != NULL) file =res; else res=tranche;
    while(res != NULL)
    {
    argv[t]=res;
    t++;
    res = strtok_r(NULL," ",&B);
    }
    argv[t]=NULL;
    //printf("path = %s\n",getenv("PATH"));
    execvp(file,argv);
    exit(0);
    break;
    }
    tranche= strtok_r(NULL,"|",&buffer);
    p=1;
    }
    }
    /**/
    /* Traitement des erreurs */
    /**/
    syserr(char *s)
    {
    printf("erreur de la primitive ");
    printf("%s\n",s);
    exit(1);
    }
    merci d'avance.

  2. #2
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    ps: tu ne fais aucun effort dans la rédaction de ton code !

    je t'ai déjà dis qu'un fork retournait -1 en cas d'erreur...
    autre remarque, comme déjà dis, tu n'utilise pas de nom de variable explicite, les gens ne peuvent pas essayer de comprendre ce que tu fais... tu utilise trop de variables, ton code est incompréhensible !
    et peut être devrais tu relire la manpage de strtok_r (qui a mon avis peut être facilement remplaçable par strtok...)

    au risque de me répéter, je te conseil de recommencer ton code depuis le début et de réfléchir avant de coder....

Discussions similaires

  1. Problème de pipe
    Par sbill dans le forum Débuter
    Réponses: 0
    Dernier message: 21/01/2015, 16h42
  2. A l'aide: Problème Multi-Pipe
    Par neo214 dans le forum C
    Réponses: 1
    Dernier message: 04/11/2011, 18h14
  3. problème de pipe
    Par Jonkile dans le forum POSIX
    Réponses: 6
    Dernier message: 23/01/2008, 16h32
  4. [PERL] Problème en essayant de comprendre fork et pipe
    Par LE NEINDRE dans le forum Langage
    Réponses: 6
    Dernier message: 04/10/2005, 15h23
  5. Problème : bloquage d'un pipe
    Par Nicaisse dans le forum POSIX
    Réponses: 10
    Dernier message: 24/07/2003, 11h06

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