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 :

lecture depuis un tube nommé


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Par défaut lecture depuis un tube nommé
    Bonjour,


    Dans le cadre de mes tests sur les tubes nommés j'ai créer les programmes suivants:

    1/Programme reader qui écrit dans le tube:

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <fcntl.h>
    #include <sys/stat.h>
     
     
     
     
    int main(){
     
        int fd;
        char msg[20];
     
     
        mkfifo("connexiontube",0644);
        fd=open("connexiontube",O_RDONLY);
     
     
         read(fd,msg,strlen(msg));
     
         printf("%s",msg);
     
     
        close(fd);
     
        return 0;
     
    }
    1/Programme writer qui lit depuis le tube:

    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
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
     
     
     
    int main(){
     
        int fd;
        char msg[20];
     
        printf("Saisissez un mot:");
        scanf("%s",msg);
     
     
     
        fd=open("connexiontube",O_WRONLY);
     
        write(fd,msg,strlen(msg));
     
     
        close(fd);
     
     
        return 0;
     
     
     
    }
    les deux programmes se compile bien et s'exécute bien.

    Je lance les deux programme, puis je saisis un mot mais lors de l'affichage le programme reader m'affiche juste le premier caractère de la chaine entrée

    donc ma question est :
    Comment faire pour récupérer toute la chaine ?
    dans le programme reader et après l’exécution de la fonction read() que contient la valeur de msg ?

    Merci pour votre aide

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Je pense que, c'est dû à:
    read(fd,msg,strlen(msg));
    En effet tu lui demande de lire "strlen(msg)" caractères, or msg est un tableau non initialisé, donc à priori la taille de la chaîne de caractères associée ne signifie rien.

  3. #3
    Membre averti
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Par défaut
    Citation Envoyé par quetzacoatl Voir le message
    Je pense que, c'est dû à:

    En effet tu lui demande de lire "strlen(msg)" caractères, or msg est un tableau non initialisé, donc à priori la taille de la chaîne de caractères associée ne signifie rien.
    merci beaucoup vous avez raison,ce que vous avez dit est totalement logique

    j'ai modifié la fonction en mettant read(fd,msg,20*sizeof(char)); ou 20 est le nombre des case du tableau de caractères.

    Juste une question y a t'il une fonction qui permet de retourner le nombre de cases d'un tableau ?

  4. #4
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Je crois que dans le cas d'un tableau statique appelé "tableau":
    donne la taille de "tableau" en octets si ça peut vous être utile(par contre ce n'est pas vrai en allocation dynamique)

  5. #5
    Membre averti
    Inscrit en
    Août 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 29
    Par défaut merci
    Merci beaucoup quetzacoatl

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

Discussions similaires

  1. probleme lecture et ecriture dans les tube nommés
    Par El-Patron dans le forum POSIX
    Réponses: 0
    Dernier message: 28/11/2009, 10h58
  2. tube nommé en C
    Par yann999 dans le forum POSIX
    Réponses: 7
    Dernier message: 24/11/2006, 11h10
  3. problème de lecture depuis un fichier texte
    Par [Hugo] dans le forum C++
    Réponses: 12
    Dernier message: 27/10/2006, 16h46
  4. Tube nommé: un casse tête
    Par yashiro dans le forum Linux
    Réponses: 2
    Dernier message: 28/06/2006, 09h11
  5. Lecture depuis un fichier
    Par Wyatt dans le forum C++
    Réponses: 4
    Dernier message: 01/03/2005, 13h38

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