Ecire dans un offset c

zilot2 -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,pardonnez mon français
j'ai un fichier binaire et je veux ecire dans un offset precis
fwrite ecrit toujours a l fin du fichier y'a t il pas fonction qui permet d'ecrire a un offset voulu
je précise l'offset par exemple 0x40000 le pointeur de fichier se pointe sur cette offset et ecrire a partir de la

1 réponse

loupius
 
Et bien le plus courant c'est fseek.
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
Un 'man' te donnera les infos complémentaires, et aussi les autres possibilités.
Bonne continuation
0
zilot2
 
je sais comment repere l'offset mais mon probleme c'est ecrire a cette offset
0
loupius > zilot2
 
Oui, j'avais, pour une fois, compris la question, et ma réponse n'a pas changé.
Tu peux lire: fseek
Fabrique un fichier "test.txt" et essaie l'exemple:
#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE* ffich;
  ffich = fopen("test.txt", "r+");
  fseek(ffich, 64L, SEEK_SET);
  fprintf(ffich, "<<< taïaut oh taïaut >>>");
  return(0);
}
Bonne continuation.
0
zilot2 > loupius
 
mon fichier est une executable ce n'est un file.txt mon but est de remplir a l'adress 0x403000 par
0x48 0x49 0x00 doc changer son binaire
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > zilot2
 
Salut,

Loupius a raison. Tu ouvres ton fichier en écriture, utilises fseek pour te mettre à l'offset voulu, et tu écris avec fwrite.

Cdlt
0
loupius > zilot2
 
Quel est le problème ?
Si j'ai pris l'exemple avec un fichier 'texte', c'est simplement par facilité de construction et de vérification. Je n'ai fait aucune hypothèse sur le type de fichier.
La seulle difficulté est d'écrire le '0x00' qui ne fonctionnera pas avec 'fprintf' car c'est le caractère de fin de chaîne. Pour contourner cette petite difficulté, il suffit d'utiliser la fonction 'fputc', ce qui donnera:
  fputc('0x48', ffich);
  fputc('0x49', ffich);
  fputc('0x00', ffich);
Quoi de plus simple ?.
0