Macro de la bibliothèque C -errno

Bibliothèque standard C - <errno.h>

Description

Macro de la bibliothèque Cextern int errnoest défini par les appels système, et certaines fonctions de bibliothèque, lors d’événements d’erreur, indiquent quelle erreur s’est produite.

errnoest une macro de la bibliothèque standard C, définie dans<errno.h>Dans le fichier d’en-tête. Il est utilisé pour indiquer les erreurs qui se produisent pendant l’exécution du programme.errnoest en fait une variable entière utilisée pour stocker des codes d’erreur. Lorsque les fonctions de bibliothèque rencontrent une erreur, elles la définissenterrnoà un code d’erreur approprié afin que le programme puisse inspecter et gérer ces erreurs.

Déclaration

Ci-dessous se trouve la déclaration de la macro errno.

extern int errno

Paramètre

  • N/D

Valeur de retour

  • N/D

UtilisationerrnoÉtapes

  1. Inclure les fichiers d’en-tête: Lors de l’utilisation deerrnoAvant, il faut inclure<errno.h>Fichier d'en-tête.
  2. Appeler une fonction: l’appel peut définirerrnode la fonction.
  3. Vérifieerrno: lorsque la fonction retourne en indiquant une erreur, vérifiezerrnopour obtenir le type d’erreur.
  4. gérer les erreurs: Selonerrnovaleur, et prendre les mesures appropriées de gestion des erreurs.

Exemple

L'exemple suivant montre l'utilisation de la macro errno.

Exemple

#include <stdio.h> #include <errno.h> #include <string.h> extern int errno ; int main () { FILE *fp; fp = fopen("file.txt", "r"); if( fp == NULL ) { fprintf(stderr, "Valeur de errno : %d\n", errno); fprintf(stderr, "Erreur d'ouverture du fichier : %s\n", strerror(errno)); } else { fclose(fp); } return(0); }

Compilons et exécutons le programme ci-dessus, lorsque le fichierfile.txtLorsqu'il n'existe pas, les résultats suivants se produiront :

Value of errno: 2
Error opening file: No such file or directory

CouranteserrnoValeur

  • EPERM: Opération non permise
  • ENOENT: Aucun fichier ou dossier de ce type
  • ESRCH: Aucun processus de ce type
  • EINTR: Appel système interrompu
  • EIO: Erreur d'entrée/sortie
  • ENXIO: Aucun périphérique ou adresse de ce type
  • E2BIG: Liste d'arguments trop longue
  • ENOMEM: Mémoire insuffisante
  • EACCES: Permission refusée
  • EFAULT: Mauvaise adresse
  • EBUSY: Ressource occupée
  • EEXIST: Le fichier existe
  • EXDEV: Lien entre appareils
  • ENODEV: Aucun périphérique de ce type
  • ENOTDIR: N'est pas un répertoire
  • EISDIR: Est un répertoire
  • EINVAL: Argument invalide
  • ENFILE: Débordement de la table des fichiers système
  • EMFILE: Trop de fichiers ouverts
  • ENOTTY: N'est pas un périphérique de terminal
  • ETXTBSY: Fichier texte occupé
  • EFBIG: Fichier trop volumineux
  • ENOSPC: Plus d'espace disponible sur le périphérique
  • ESPIPE: Adressage illégal
  • EROFS: Système de fichiers en lecture seule
  • EMLINK: Trop de liens
  • EPIPE: Tube cassé

Notes

  1. Sécurité des threads: Dans un environnement multithread,errnoest généralement implémenté sous forme de stockage local au thread (TLS), garantissant que chaque thread dispose d'une instance indépendante.errnovaleur.
  2. Valeur initiale: Lorsque l'appel de fonction réussit,errnon'est généralement pas modifié. Par conséquent, avant de gérer les erreurs, vous devez vous assurer queerrnoest défini à 0.
  3. Différences multiplateformes: Différents systèmes d'exploitation et implémentations de la bibliothèque standard C peuvent définir des codes d'erreur supplémentaires. Les programmes doivent éviter de s'appuyer sur les valeurs numériques de codes d'erreur spécifiques.

Suggestions de gestion des erreurs

  1. Vérifier la valeur de retour: Lors de l'appel de fonctions susceptibles d'échouer, vérifiez toujours leur valeur de retour.
  2. Paramètreserrnoest 0: Avant d'appeler la fonction, vous pouvezerrnodéfini à 0, afin qu'après l'appel de fonction vous puissiez vérifiererrnos'il a été modifié.
  3. Utilisationstrerroretperror:strerrorLa fonction vaerrnoconvertir en une chaîne de message d'erreur lisible ;perrorla fonction affiche la valeur errno avec un message d'erreur descriptif.errnovaleur.

Gestion détaillée des erreurs

Ci-dessous se trouve un exemple plus détaillé montrant comment gérer différentserrnoValeur :

Exemple

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

int main() {
    FILE *file = fopen("nonexistent_file.txt", "r");
    if (file == NULL) {
        switch (errno) {
            case EACCES:
                printf("Erreur : Permission refusée\n");
                break;
            case ENOENT:
                printf("Erreur : Aucun fichier ou répertoire de ce type\n");
                break;
            default:
                printf("Erreur lors de l'ouverture du fichier : %s\n", strerror(errno));
        }
        return 1;
    }

    // Code de traitement de fichier
    fclose(file);
    return 0;
}

Dans cet exemple, nous avons vérifié laerrnovaleur et traité en conséquence. SierrnoOuiEACCES(Permission denied) ouENOENT(No such file or directory), nous affichons un message d'erreur spécifique ; sinon, nous affichons un message d'erreur générique.

<errno.h>fournit un moyen standardisé de signaler et de gérer les erreurs dans les programmes, ce qui rend le code de gestion des erreurs plus cohérent et plus facile à maintenir.

Bibliothèque standard C - <errno.h>

autres extensions