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

POSIX C Discussion :

problème de pipe


Sujet :

POSIX C

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 91
    Points : 51
    Points
    51
    Par défaut problème de pipe
    Bonjour,
    J'ai un petit problème dans mon code, en effet lorsque je tente de lire sur mon pipe via une boucle le programme ne fait rien du tout
    voici ma fonction
    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
    char * reception_sms(int desc2)
    {
     printf(" -----------reception------------ \n") ;
     char * sms ;
     sms =  malloc(255 * sizeof(char) ) ;
     
     
    int i = 0 ;
    while ( read(desc2, &sms[i], 1) != EOF)
    {
     i ++ ;
     if ( sms[i-1]=='\n')
    	{
    	 sms[i-1] = '\0' ;
    	 break ;	
    	}
     
    }
     
     printf( "nouveau message : %s \n " , sms) ;
     return sms ;
    je ne comprend pas pourquoi

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    y'a quelque chose dedans sinon pourquoi eof?

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 91
    Points : 51
    Points
    51
    Par défaut
    Oui il y a quelque chose dedans il y a des données c'est sûr. En fait avant je faisais un read(fd,sms,255) mais apparemment (d'après mon prof) cela engendre des erreurs et il m'a demandé de faire une boucle mais je comprend pas pourquoi ça amrche pas alors que j'utilise la même boucle dans une autre fonction et que ça lit parfaitement.

    Le EOF c'est pour lui indiquer de continuer je crois, j'avoue que je sais pas torp pourquoi c'est le prof encore une fois qui me l'a tapée

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 149
    Points
    149
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    char * reception_sms(int desc2)
    {
     printf(" -----------reception------------ \n") ;
     char* sms ;
     sms =  malloc(255 * sizeof(char) ) ;
     
    int i = 0 ;
    lenght = read(desc2, sms, 255);
     
     printf( "nouveau message : %s \n " , sms) ;
     return sms ;
    Je pense qu'il y a un problème dans ta boucle !!
    Je ferais quelque chose comme ce que j'ai fait au dessus.
    lenght contient le nombre de caractère lus. (254 dans le read est traditionnellement la taille du buffer)
    Si tu veux faire une lecture bufferisé il faudrais faire quelquechose comme ce qui suit.

    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
     
    //tableau de chaines de caractère
    char* sms[100];
    //on lit le message
    while( (lenght = read(desc2,sms[i],255)) > 0)
    {
      i++;
      sms[i] = malloc(255*sizeof(char));
    }
    //on affiche le message
    int j = 0;
    printf ("Votre message est : ");
    while(j<=i)
    {
     printf("%s",sms[j]);
     j++;
    }
    Je pense que cela feras ce que tu voudras.
    C'est à dire afficher tout ton message. read te renvoyant le nombre de caractère lu, il n'y a pas de problème (attention à ne pas oublier de compter le \0 en fin de chaîne de caractère).

    EOF : End Of File, c'est une constante qui en général correspond au \0

    En espérant t'avoir aidé.

    Bon courage

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 91
    Points : 51
    Points
    51
    Par défaut
    Et bien merci ça roule comme il faut
    par contre je vois pas trop la différence entre les deux méthodes ?

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    il n'y a pas de EOF c'est un fichier spécial

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par Jonkile Voir le message
    Et bien merci ça roule comme il faut
    par contre je vois pas trop la différence entre les deux méthodes ?
    Dans le premier cas je recupère le message (mais il ne doit pas dépasser 255 caractères (taille du buffer)).
    Dans le deuxième cas, je gère un buffer et je peux donc écrire en gros 100 * 255 caractères.

    Mais je ne suis pas sur de répondre à ce que tu voulais faire (j'entend tu faisais une lecture caractère par caractère, il y a p-e une raison ?)

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 laracroft87 dans le forum Linux
    Réponses: 1
    Dernier message: 07/05/2009, 00h01
  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