Ecire dans un offset c

Fermé
zilot2 - 22 août 2009 à 19:27
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 août 2009 à 21:11
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

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
je sais comment repere l'offset mais mon probleme c'est ecrire a cette offset
0
loupius > zilot2
22 août 2009 à 23:09
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
23 août 2009 à 12:25
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > zilot2
23 août 2009 à 12:43
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
23 août 2009 à 12:54
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