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 :

un read ou plusieurs, qu'est - ce qui est mieux ?


Sujet :

C

  1. #1
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut un read ou plusieurs, qu'est - ce qui est mieux ?
    Bonjour,

    je me demande quelle méthode est meilleure pour lire d'un fichier.
    lire le fichier entier en une fois, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    read(fd,chaine,taille_fichier);
    ou est-ce mieux de lire le fichier caractère par caractère comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    i=0;
    while(read(fd,c,1)!=0)
    {
         chaine[i]=c;
        i++;
    }
    Dans la première méthode, la possibilité qu'il y ait une erreur est plus petite non ??

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Attention, si je me trompe pas, read n'est pas standard donc pas portable !

    Je pencherais plutôt pour une lecture avec fgets avec à la rigueure une taille de BUFSIZ pour le tampon !

    Lire un fichier d'un coup, si ton fichier fait plusieures centaines voir milliers de lignes ca risque de faire gros et caractères par caractères ca risque d'être long !

  3. #3
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    En une fois est plus rapide et génère sûrement moins d'erreur.

  4. #4
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par CSoldier
    Attention, si je me trompe pas, read n'est pas standard donc pas portable !

    Je pencherais plutôt pour une lecture avec fgets avec à la rigueure une taille de BUFSIZ pour le tampon !

    Lire un fichier d'un coup, si ton fichier fait plusieures centaines voir milliers de lignes ca risque de faire gros et caractères par caractères ca risque d'être long !
    A la différence près que read lit dans un "file descritor", alors que fgets lit dans un flux (FILE *). C'est une différence non négligeable.

    Pour ce qui est de la portabilité, j'ai un doute. Tu en es sûr ?

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par crocodilex
    Pour ce qui est de la portabilité, j'ai un doute. Tu en es sûr ?
    read() est POSIX. fread() est l'equivalent C ISO.

  6. #6
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par DaZumba
    read() est POSIX. fread() est l'equivalent C ISO.
    Ce n'est pas un équivalent.
    fread lit également dans un flux comme fgets

  7. #7
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par crocodilex
    Ce n'est pas un équivalent.
    fread lit également dans un flux comme fgets
    Un file descriptor est une notion systeme (au mieux, POSIX). Le C standard ne connait pas cette notion, il n'admet que des 'streams'. fread() est donc bien l'equivalent C ISO de la fonction systeme read() [l'implementation de fread() fait surement appel a read() en interne, mais on ne s'en occupe pas].

    Pour repondre a la question originale, lire un fichier en une fois est une drole d'idee... Et si l'utilisateur soumet au programme un fichier de 30 Go?

  8. #8
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Pour repondre a la question originale, lire un fichier en une fois est une drole d'idee... Et si l'utilisateur soumet au programme un fichier de 30 Go?
    J'utilise la structure stat avec laquelle j' obtient la taille du fichier,
    par conséquent, s'il est vraiment trop grand, je ne lis pas.

  9. #9
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Un seul appel à read est beaucoup plus efficace que plusieurs appels à read
    Personnellement, je prefere fread (parce que je prefere fopen à open)
    Attention à ne pas melager des fread() et des read() ou des fwrite() et des write()

  10. #10
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Merci Gruik,

    je sais, la différence entre fopen et open, fread et read, etc..
    c'est que open, etc.. c'est une primitive système et les autres fopen, etc... , c'est des fonctions de la librairie du C.

    Mais je voulais ecrire le tout en primitive système.

    Merci

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

Discussions similaires

  1. [Listeners] Qu'est ce qui est le plus propre?
    Par michaeljeru dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/05/2007, 12h21
  2. [PEAR][Spreadsheet] Qu'est-ce qui est PEAR pour EXCEL que COM ?
    Par a028762 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/12/2006, 18h34
  3. qu'est-ce qui est le mieux ?
    Par trotters213 dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2006, 15h34
  4. Qu'est-ce qui est envoyé ??
    Par S P H dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 30/05/2006, 23h59

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