Lire en continu dans un fichier qui croît

Problème

Vous voulez lire un fichier qui croît, tel un fichier de journalisation (log).

Solution

Lisez le fichier normalement, avec une boucle infinie, mais effectuez un appel à fseek(fd,SEEK_CUR,0) à chaque fois que la fin de fichier est atteinte.

Discussion

Nous pouvons lire et afficher le contenu d’un fichier qui croît avec la commande tail -f des systèmes Unix, qui se programme ainsi :


#include <stdio.h> 
#include <stdlib.h> 
 
int 
main (int argc, char **argv) 
{ 
  FILE *fd; 
  char buffer[BUFSIZ + 1]; 
  if (NULL == (fd = fopen (argv[1], "r"))) 
    { 
      fprintf (stderr, "Impossible d'ouvrir %s\n", argv[1]); 
      exit (EXIT_FAILURE); 
    } 
  while (1) 
    { 
      ssize_t l; 
      if (BUFSIZ != (l = fread (buffer, sizeof (char), BUFSIZ, fd))) 
        { 
          if (feof (fd)) 
            fseek (fd, 0, SEEK_CUR); 
          else 
            { 
              fprintf (stderr, "Problème de lecture\n"); 
              exit (EXIT_FAILURE); 
            } 
        } 
      buffer[l] = '\0'; 
      fprintf (stdout, "%s", buffer); 
      fflush (stdout); 
    } 
  exit (EXIT_SUCCESS); 
}
 
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Créer des fichiers temporaires
Suivant
Introduction