Retour au cours

Gestion des erreurs : errno et perror

Langage C : de Zéro à Héros - Le Guide Complet pour Débutants

Leçon 55 : Gestion des erreurs : errno et perror

En C, de nombreuses fonctions de la bibliothèque standard (particulièrement pour les E/S et les appels système) signalent un échec en renvoyant une valeur spéciale (comme NULL pour fopen ou -1 pour les appels système). Parallèlement, elles définissent une variable entière globale, errno, pour indiquer la raison de l'échec.

La variable errno

  • Définie dans <errno.h>.
  • Elle est mise à jour par les appels système et les fonctions de bibliothèque lors d'un échec.
  • Sa valeur est un code entier représentant un type d'erreur spécifique (ex: 'Fichier non trouvé', 'Permission refusée').

Crucial : errno n'est significative qu'immédiatement après l'échec d'une fonction. Sa valeur n'est pas garantie après des appels réussis ultérieurs.

La fonction perror()

perror() affiche un message d'erreur descriptif sur stderr (Erreur standard) en se basant sur la valeur actuelle de errno. Elle vous permet de faire précéder le message d'erreur par une chaîne personnalisée.

Syntaxe : void perror(const char *s);

Exemple : Erreur d'ouverture de fichier

c #include <stdio.h> #include <errno.h>

int main() { FILE *fp;

// Tentative d'ouverture d'un fichier inexistant en lecture
fp = fopen("inexistant.dat", "r");

if (fp == NULL) {
    // Utilisation de perror pour afficher l'erreur
    perror("Échec de l'opération sur le fichier");
    // La sortie pourrait ressembler à :
    // Échec de l'opération sur le fichier: No such file or directory
    return 1;
}

fclose(fp);
return 0;

}

strerror()

La fonction strerror() (dans <string.h>) renvoie un pointeur vers la chaîne de caractères lisible correspondant à un numéro d'erreur donné, ce qui est utile pour journaliser l'erreur au lieu de l'afficher immédiatement.