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 :

bug dans fclose ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut bug dans fclose ?
    Re salut tout le monde.

    Décidemment j'y prends gout à ce forum.

    Bon je bute sur un comportement super bizarre.
    J'ai un programme tout bete qui écrit des données dans un fichier. C'est assez gros (environ 160 mille lignes).

    À la toute fin de mon programme je fais un fclose sur le fichier, ce qui réduit la taille du fichier !?
    Je ne comprends pas du tout ce qu'il peut bien se passer.

    Code de fermeture du fichier (chr5_non_group.idx étant le nom du fichier associé au flux output_idx) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     // BUG BUG BUG La taille des fichiers diminue apres le fclose !
      system("ls -l chr5_non_group.idx");
     
      fflush(output_idx);
     
      system("ls -l chr5_non_group.idx");
      fclose(output_idx);
     
      system("ls -l chr5_non_group.idx");
    Le résultat des ls -l (ou l'on voit la taille évoluer avant et apres les fflush et fclose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -rw-r--r--  1 ppeterlo symbiose 1245184 Jun  1 16:22 chr5_non_group.idx
    -rw-r--r--  1 ppeterlo symbiose 1250861 Jun  1 16:22 chr5_non_group.idx
    -rw-r--r--  1 ppeterlo symbiose 688128 Jun  1 16:22 chr5_non_group.idx
    Je n'y comprend rien, si vous avez une idée de ce qu'il se passe, je suis preneur !

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    d'abord ton fichier contient-il à la fin les bonnes informations ?
    d'autre part, tu es sous quel OS ?

    Si tu es sous *n*x, tu peux en // à l'éxécution de ton programme dans un autre shell faire un "tail -f nom_du_fichier", qui 'affichera en temps réel la fin du fichier...


    Mais cela m'étonnerais franchement que fclose ait un bug...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Merci encore pour tes réponses...

    Mon fichier ne contient en effet pas (plus) les infos qui est sensé contenir.

    Dans mon post précédent j'ai supprimé pas mal de détails dans mon code, mais j'avais déjà cherché le truc avec des tail et autres system("cat machin > bidule"). Clairement le fichier évolue et gagne ou perd en fonction d'instructions qui n'ont apriori rien à voir.

    Là, j'comprends pas...

    à propos de l'OS l*n*x: 2.6.15


    Si je ne trouve pas je l'essaierai sous un autre noyau

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    As-tu testé le code de retour ??

    http://www.linux-kheops.com/doc/man/.../fclose.3.html

    D'autre part :

    es-tu sûr que tu ne fais pas 2 fois fclose ?
    que tu as bien fait des fflush régulièrement (visiblement, ton fichier était gros, d'après ton autre post. Il est donc possible que tu dépasses la taille du tampon avant de faire un fflush...)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Je n'ai en effet pas fait de fflush (si ce n'est le tout dernier que j'ai ajouté pour voir si le probleme n'était pas du à ça).
    Et je n'ai pas non plus testé la valeur de retour de fclose.
    Je vais faire ça (malheureusement pas aujourd'hui) et je vous tiens au courant.

    pierre

  6. #6
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par pierre350d
    Re salut tout le monde.

    Décidemment j'y prends gout à ce forum.

    Bon je bute sur un comportement super bizarre.
    J'ai un programme tout bete qui écrit des données dans un fichier. C'est assez gros (environ 160 mille lignes).

    À la toute fin de mon programme je fais un fclose sur le fichier, ce qui réduit la taille du fichier !?
    Je ne comprends pas du tout ce qu'il peut bien se passer.

    Code de fermeture du fichier (chr5_non_group.idx étant le nom du fichier associé au flux output_idx) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     // BUG BUG BUG La taille des fichiers diminue apres le fclose !
      system("ls -l chr5_non_group.idx");
     
      fflush(output_idx);
     
      system("ls -l chr5_non_group.idx");
      fclose(output_idx);
     
      system("ls -l chr5_non_group.idx");
    Le résultat des ls -l (ou l'on voit la taille évoluer avant et apres les fflush et fclose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -rw-r--r--  1 ppeterlo symbiose 1245184 Jun  1 16:22 chr5_non_group.idx
    -rw-r--r--  1 ppeterlo symbiose 1250861 Jun  1 16:22 chr5_non_group.idx
    -rw-r--r--  1 ppeterlo symbiose 688128 Jun  1 16:22 chr5_non_group.idx
    Je n'y comprend rien, si vous avez une idée de ce qu'il se passe, je suis preneur !
    En même temps, tu as le flux group.idx ouvert et tu accèdes à ton fichier en lecture via le ls de system(), qui doit à minima faire un stat sur le fichier. Je ne sais pas ce que cela produit mais il possible que ce soit un comportement indéfini, faut regarder ce que dit la norme. Je ne crois pas à un bogue de fclose().

    La commande d'admin lsof (lsof | grep 'chr5_non_group.idx') permet de lister les fichiers ouverts par les processus. Cela peut être intéressant de faire un system avec une commande qui dure dans le temps sur le fichier et de regarder ce que donne lsof. De même, je pense que mettre des temporisations avant et après les appels à system() peut changer la donne.

    A+

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Foobar1329
    De même, je pense que mettre des temporisations avant et après les appels à system() peut changer la donne.
    bah system est bloquant normalement (si tu ne mets pas la commande en background)....

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Par défaut
    Bon, je vais faire un trou pour me cacher dedans.

    J'ai développé les travaux dont j'ai parlé sur un compte dont j'avais atteind le quota...
    Le comportement dans ce cas est très... curieux.

    Merci en tout cas de vous être creusé la tête !
    Pierre

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

Discussions similaires

  1. Bug dans le TCheckListBox ?
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 6
    Dernier message: 04/11/2004, 08h39
  2. Bug dans les expressions régulières ?
    Par SergioF dans le forum Linux
    Réponses: 8
    Dernier message: 12/05/2004, 15h14
  3. [PROPERTIES] Bug dans java.util.Properties ?
    Par mathieu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/04/2004, 15h11
  4. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41

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