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
- Inclure les fichiers d’en-tête: Lors de l’utilisation de
errnoAvant, il faut inclure<errno.h>Fichier d'en-tête. - Appeler une fonction: l’appel peut définir
errnode la fonction. - Vérifie
errno: lorsque la fonction retourne en indiquant une erreur, vérifiezerrnopour obtenir le type d’erreur. - gérer les erreurs: Selon
errnovaleur, et prendre les mesures appropriées de gestion des erreurs.
Exemple
L'exemple suivant montre l'utilisation de la macro errno.
Exemple
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 permiseENOENT: Aucun fichier ou dossier de ce typeESRCH: Aucun processus de ce typeEINTR: Appel système interrompuEIO: Erreur d'entrée/sortieENXIO: Aucun périphérique ou adresse de ce typeE2BIG: Liste d'arguments trop longueENOMEM: Mémoire insuffisanteEACCES: Permission refuséeEFAULT: Mauvaise adresseEBUSY: Ressource occupéeEEXIST: Le fichier existeEXDEV: Lien entre appareilsENODEV: Aucun périphérique de ce typeENOTDIR: N'est pas un répertoireEISDIR: Est un répertoireEINVAL: Argument invalideENFILE: Débordement de la table des fichiers systèmeEMFILE: Trop de fichiers ouvertsENOTTY: N'est pas un périphérique de terminalETXTBSY: Fichier texte occupéEFBIG: Fichier trop volumineuxENOSPC: Plus d'espace disponible sur le périphériqueESPIPE: Adressage illégalEROFS: Système de fichiers en lecture seuleEMLINK: Trop de liensEPIPE: Tube cassé
Notes
- 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. - 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. - 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
- Vérifier la valeur de retour: Lors de l'appel de fonctions susceptibles d'échouer, vérifiez toujours leur valeur de retour.
- Paramètres
errnoest 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é. - Utilisation
strerroretperror: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 <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.