Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2874 connectés 

  FORUM HardWare.fr
  Programmation
  C

  C sous Linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C sous Linux

n°884091
Mookie
Posté le 27-10-2004 à 16:47:47  profilanswer
 

Bonjour!
 
J'ai un petit problème pour écrire et lire dans un fichier sous Linux.
J'ai une fonction qui initialise un index.
Si le fichier index.dat existe, il le charge dans un tableau en mémoire, sinon il crée le fichier index.dat a partir d'un fichier de données.
A la première exécution, je crée mon fichier index et j'écris mon tableau d'index dedans.
Je ferme mon fichier et je lis les données pour vérifier, tout est ok, elles sont affichées correctement.
Mais ensuite, je quitte mon programme et je le relance.
Mon programme passe donc par l'autre condition (le fichier index existe, on le charge donc en mémoire).
Et la, en lisant EXACTEMENT le même code de lecture du fichier, il affiche  n'importe quoi!
 
Voici le code :

Code :
  1. // Ecriture dans le fichier index.dat
  2. // debIndex étant le pointeur de mon tableau d'index
  3. // tmp étant le malloc d'une structure
  4. while(debIndex->Pos!=-1)
  5. {
  6.    tmp->Pos=debIndex->Pos;
  7.    strcpy(tmp->Element,debIndex->Element);
  8.    write(FichInd.hdIndex,tmp,TailleEnreg);
  9.    debIndex++;
  10. }
  11. close(FichInd.hdIndex);
  12. FichInd.hdIndex=open("Index.dat",O_RDWR);
  13. // Lecture
  14. go=1;
  15. while(go==1)
  16. {
  17. // Si c'est la fin du fichier
  18. if(read(FichInd.hdIndex,tmp,TailleEnreg)!=TailleEnreg)
  19.    go=0;
  20. // On enregistre dans le tableau d'index
  21. else
  22. {
  23.    printf("%s -- %d",tmp->Element,tmp->Pos);
  24.    Pause();
  25.    debIndex->Pos=tmp->Pos;
  26.    strcpy(debIndex->Element,tmp->Element);
  27.    debIndex++;
  28. }
  29. }


Donc ce code ci marche parfaitement. Mais lorsque je relance le programme et que je n'effectue que la lecture, il bloque dans la boucle car il ne passe jamais par cette condition
if(read(FichInd.hdIndex,tmp,TailleEnreg)!=TailleEnreg)
  go=0;  
Et il m'affiche des 0 pour Pos et rien pour Element.
 
Merci d'avance pour votre aide.

mood
Publicité
Posté le 27-10-2004 à 16:47:47  profilanswer
 

n°884124
Taz
bisounours-codeur
Posté le 27-10-2004 à 17:06:33  profilanswer
 

déjà utiliser les FILE*
 
rajoute des vérification d'erreurs partout (open par exemple)
 
après s'il tourne indéfiniment dans ta boucle c'est que y a des trucs à lire ...

n°884143
Mookie
Posté le 27-10-2004 à 17:18:44  profilanswer
 

Pour le FILE* j'ai pas le choix, c'est mon prof qui utilise un int.
J'ai testé les codes de retour et ils sont ok. Mais le problème ne vient pas de là vu que le code marche après l'écriture. C'est juste quand je n'utilise que la lecture que ça plante (après avoir relancé le programme). C'est pour devenir fou...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  C sous Linux

 

Sujets relatifs
Compilation java linuxphp sous linux
[Linux] Service utilisant InetdProgrammation réseau windows ET Linux : quelle librairie ?
[opengl] [linux] probleme de lib[wxwidget] Problème de compilation sous linux
Exécuter une commande linux via un script PHP !?re-configure php linux pour postgres
Java sous linux mankrake 
Plus de sujets relatifs à : C sous Linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR