C sous Linux

C sous Linux - C - Programmation

Marsh Posté le 27-10-2004 à 16:47:47    

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.

Reply

Marsh Posté le 27-10-2004 à 16:47:47   

Reply

Marsh Posté le 27-10-2004 à 17:06:33    

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 ...

Reply

Marsh Posté le 27-10-2004 à 17:18:44    

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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed