Problème d'écriture dans un fichier

Problème d'écriture dans un fichier - C - Programmation

Marsh Posté le 18-12-2005 à 22:00:47    

Bonjour,
 
Je veux faire un programme qui rajoute dans 0 à la fin d'un fichier, pour que sa taille soit un multiple de 512.
J'ai donc écrit le code suivant :  
 

Code :
  1. int main(int argc, char **argv)
  2. {
  3. FILE *f;
  4. long pos;
  5. char garbage = 0;
  6. if(argc < 2)
  7. {
  8.  fprintf(stderr, "%s <nom fichier>\n", argv[0]);
  9.  return 1;
  10. }
  11. f = fopen(argv[1], "ab" );
  12. if(!f)
  13. {
  14.  fprintf(stderr, "error opening %s", argv[1]);
  15.  return 1;
  16. }
  17. pos = ftell(f);
  18. if(pos % 512)
  19. {
  20.  /* nombre de bordel a ecrire */
  21.  pos = 512 - (pos % 512);
  22.  fwrite(&garbage, 1, pos, f);
  23.  if(ferror(f))
  24.  {
  25.   fprintf(stderr, "error writing %s\n", argv[1]);
  26.   return 1;
  27.  }
  28. }
  29. fclose(f);
  30. return 0;
  31. }


 
Seulement, au lieu de m'écrire des 0, il écrit n'importe quoi dans le fichier.
 
J'ai donc remplacé le  
fwrite(&garbage, 1, pos, f);
par  

Code :
  1. long i;
  2.  for(i = 0; i<pos; ++i)
  3.  {
  4.   fputc(garbage, f);
  5.   if(ferror(f))
  6.   {
  7.    fprintf(stderr, "error writing %s\n", argv[1]);
  8.    return 1;
  9.   }
  10.  }


et la, ca fonctionne.
Je ne comprends pas pourquoi ca ne fonctionne pas avec write ? ai-je mal utilisé utilisé cette fonction ?
Je suis sur PC sur RedHat 9.
Merci de m'éclairer :)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 18-12-2005 à 22:00:47   

Reply

Marsh Posté le 18-12-2005 à 23:17:32    

Tu lui files un pointeur sur un char et tu lui dis d'aller chercher tes ~512 éléments à la suite de ce pointeur, c'est à dire n'importe où dans la mémoire excepté peut-être pour le premier caractère.

Reply

Marsh Posté le 19-12-2005 à 01:08:13    

rolala oui suis-je bete ... j'avais oublié que c'etait par exemple pour passer un tableau en paramètre, et count indique le nombre d'éléments du tableau ... honte sur moi :p


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 20-12-2005 à 09:43:16    

regarde directement le retour de ton fputc.
tu peux faire ça sans boucle avec un
 
char garbage[511] = "";
fwrite(garbage, 1, n, out);

Reply

Sujets relatifs:

Leave a Replay

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