next up previous contents index
Next: Lecture et écriture de Up: No Title Previous: Randomisation

Lecture et écriture sur fichier

    

Les entrées (ou lectures) et les sorties (ou écritures) sur fichier se font par l'intermédiaire de flots d'octets (anglais byte streams ), à l'aide de fonctions, types et variables déclarés   dans stdio.h. Un flot d'octets est une suite d'octets successivement lus ou écrits, représenté en C comme un pointeur vers un objet de type FILE.

Un flot d'octets sur un fichier est créé (ou ouvert) au moyen de la fonction fopen qui retourne un pointeur de FILE et prend en argument deux chaînes de caractères : le nom du fichier et le mode d'accès. Ce mode est usuellement "r" pour l'accès en lecture, "w" pour l'accès en écriture (ce mode-ci permet de créer un fichier en écrasant le contenu du fichier s'il existe déjà), ou "a" (qui permet d'écrire à la fin du fichier, et de le créer s'il n'existe pas). On écrira ainsi :  

FILE 
  *in = fopen("donnees", "r"),         /* en lecture */
  *out = fopen("resultats", "w"),      /* en écriture au début */
  *out2 = fopen("archive", "a");       /* en écriture à la fin */

pour créer trois flots sur les fichiers donnees, resultats et archive du répertoire courant, dans chacun des trois principaux modes d'accès. Quand un flot d'octets n'est plus utilisé, il doit être fermé au moyen de fclose, qui retourne 0 en cas de succès :  

  fclose(in);

Avant de tenter de lire ou d'écrire sur un fichier, il est fortement conseillé de tester si l'ouverture a réussi, en testant si le pointeur retourné par fopen n'est pas nul :

  FILE *in = fopen(nom, "r");

  if (in == NULL) {
    fprintf(stderr, "erreur : %s ne peut pas être ouvert", nom);
    exit(1);
  } else {
    ...
  }

Quand l'exécution d'un programme commence, le flot d'entrée standard, le flot de sortie standard et le flot de sortie d'erreur standard, désignés respectivement par les noms stdin, stdout et stderr, sont déjà créés.        


next up previous contents index
Next: Lecture et écriture de Up: No Title Previous: Randomisation
Jean-Philippe Chancelier
9/29/1998