next up previous contents index
Next: Modes d'accès à un Up: No Title Previous: Lecture et écriture de

Lecture et écriture d'octets

    

On ne peut utiliser la fonction fscanf que pour lire sur un fichier contenant des données respectant un certain format (par exemple, si on sait que chaque ligne contient un entier, un espace, une chaîne de caractères, un espace et un nombre flottant). Si l'on ignore a priori le contenu d'un fichier, on doit effectuer une lecture octet par octet et confier au programme, éventuellement, l'interprétation de ces octets.

La fonction getc prend en argument un flot d'octets et retourne dans un int l'octet disponible à la position courante de ce flot ou bien retourne la constante EOF  si la fin du fichier est atteinte. La fonction putc, qui prend en argument un entier et un flot d'octets, écrit un octet dans ce flot à la position courante. La position courante de lecture ou d'écriture avance d'un octet après chaque opération réussie et est conservée en mémoire entre deux opérations successives.

La fonction suivante réalise une copie d'un flot d'octets sur un autre :

void copie(FILE *p, FILE *q) {
  int c = getc(p);
  
  while(c != EOF) {
    putc(c, q);
    c = getc(p);
  }
}

Il faut savoir que, pour des raisons d'efficacité, une écriture sur un flot d'octets n'implique pas nécessairement une écriture immédiate sur le fichier correspondant : l'écriture se fait d'abord sur un tampon qui est ultérieurement vidé vers le fichier. La fonction fflush permet de provoquer le vidage du tampon associé au flot d'octets passé en argument, pour s'assurer de l'écriture immédiate d'un octet sur le fichier :  

fputc(c, stdout);
fflush(stdout);
Il est cependant inutile d'effectuer ce vidage si c est \n, si le tampon est plein, ou juste avant un appel à fclose() : dans tous ces cas, le vidage est automatique.


next up previous contents index
Next: Modes d'accès à un Up: No Title Previous: Lecture et écriture de
Jean-Philippe Chancelier
9/29/1998