Leçons de niveau 15

Fonctions de base en langage C/errno.h

Une page de Wikiversité.
Sauter à la navigation Sauter à la recherche
Début de la boite de navigation du chapitre
errno.h
Icône de la faculté
Chapitre no 3
Leçon : Fonctions de base en langage C
Chap. préc. :ctype.h
Chap. suiv. :math.h
fin de la boite de navigation du chapitre
Icon falscher Titel.svg
En raison de limitations techniques, la typographie souhaitable du titre, « Fonctions de base en langage C : errno.h
Fonctions de base en langage C/errno.h
 », n'a pu être restituée correctement ci-dessus.
Searchtool.svg Des informations sur la gestion des erreurs dans le wikilivre Programmation C, chapitre sur les erreurs.

Le fichier d'entête errno.h définit le mécanisme qui permet de savoir si une fonction système ou une fonction de la bibliothèque standard a rencontré une erreur. Elle écrit alors une valeur entière dans errno.

Remarques sur l’utilisation de errno[modifier | modifier le wikicode]

  • une fonction qui s'exécute avec succès ne remet pas à 0 errno, vous devez vous en charger avant de l'appeler.
  • errno peut ne pas être une variable : ne pas utiliser son adresse.
  • Vous devez stocker ou exploiter au plus tôt errno juste après l'appel de la fonction. Tout appel à une fonction autre que perror risque d'écraser errno.
  • Ne pas utiliser le mécanisme errno dans vos propres fonctions.

Constantes symboliques[modifier | modifier le wikicode]

errno.h contient la définition de constantes symboliques qui représentent les codes d'erreur de errno.

Ces constantes peuvent être spécifiques à un système. Il faut étudier errno.h sur la machine cible pour assurer la portabilité des programmes.

Fonctions utiles[modifier | modifier le wikicode]

  • void perror(char *s) : Affiche le message d'erreur correspondant à errno sur stderr.
  • char *strerror(int n) : Renvoie le message d'erreur correspondant à n.

Un extrait de code qui analyse le résultat de la fonction système stat en cas de problème :

cr = stat(nomFichier, &buf);
if (cr != 0)
{
   perror("stat");
   exit(EXIT_FAILURE);
}