errno, _doserrno, _sys_errlist et _sys_nerr
Macros globales qui contiennent des codes d'erreur définis pendant l'exécution du programme et équivalents chaîne des codes d'erreur pour l'affichage.
#define errno (*_errno()) #define _doserrno (*__doserrno()) #define _sys_errlist (__sys_errlist()) #define _sys_nerr (*__sys_nerr())
Notes
Les éléments errno et _doserrno sont définis à 0 par l'exécution lors du démarrage du programme. L'élément errno est déclenché en cas d'erreur lors d'un appel au niveau système. Comme errno contient la valeur du dernier appel qui le définit, cette valeur peut être modifiée par les appels suivants. Les appels de la bibliothèque Runtime qui déclenchent errno en cas d'erreur ne suppriment pas errno en cas de réussite. Supprimez toujours errno en appelant _set_errno(0) juste avant un appel qui peut le déclencher, puis vérifiez-le immédiatement après celui-ci.
En cas d'erreur, l'élément errno n'est pas nécessairement défini à la même valeur que le code d'erreur retourné par un appel système. En ce qui concerne les opérations d'E/S, _doserrno stocke les équivalents en codes d'erreur des codes errno du système d'exploitation. Pour la plupart des opérations autres que d'E/S, la valeur _doserrno n'est pas définie.
Chaque valeur errno est associée à un message d'erreur dans _sys_errlist qui peut être imprimé en utilisant l'une des fonctions perror, ou stocké dans une chaîne à l'aide de l'une des fonctions strerror ou strerror_s. Les fonctions perror et strerror utilisent le tableau _sys_errlist et _sys_nerr, le nombre d'éléments dans _sys_errlist, pour traiter les informations relatives aux erreurs. Un accès direct à _sys_errlist et _sys_nerr est déconseillé pour des raisons de sécurité du code. Nous vous recommandons d'utiliser les versions fonctionnelles plus sécurisées, au lieu des macros globales, comme indiqué ici :
Macro globale |
Équivalents fonctionnels |
---|---|
_doserrno |
|
errno |
|
_sys_errlist, _sys_nerr |
Les routines mathématiques des bibliothèques définissent errno en appelant _matherr. Pour gérer des erreurs mathématiques différemment, écrivez votre propre routine selon la description de la référence _matherr, puis appelez-la _matherr.
Toutes les valeurs errno du tableau suivant sont des constantes prédéfinies dans <errno.h> et compatibles avec UNIX. Seuls ERANGE, EILSEQ, et EDOM sont spécifiés dans la norme ISO C99.
Constante |
Message d'erreur système |
Valeur |
---|---|---|
EPERM |
Opération non autorisée |
1 |
ENOENT |
Aucun fichier ou répertoire de ce type |
2 |
ESRCH |
Aucun de ces processus |
3 |
EINTR |
Fonction interrompue |
4 |
EIO |
Erreur d'E/S |
5 |
ENXIO |
Aucun périphérique ou adresse de ce type |
6 |
E2BIG |
Liste d'arguments trop longue |
7 |
ENOEXEC |
Erreur de format exec |
8 |
EBADF |
Numéro de fichier erroné |
9 |
ECHILD |
Aucun processus généré |
10 |
EAGAIN |
Plus de processus disponibles ou mémoire insuffisante ou niveau maximal d'imbrication atteint |
11 |
ENOMEM |
Mémoire insuffisante |
12 |
EACCES |
Autorisation refusée |
13 |
EFAULT |
Adresse incorrecte |
14 |
EBUSY |
Périphérique ou ressource occupé |
16 |
EEXIST |
Le fichier existe |
17 |
EXDEV |
Lien multi-périphériques |
18 |
ENODEV |
Aucun périphérique de ce type |
19 |
ENOTDIR |
Pas un répertoire |
20 |
EISDIR |
Est un répertoire |
21 |
EINVAL |
Argument non valide |
22 |
ENFILE |
Trop de fichiers ouverts dans le système |
23 |
EMFILE |
Trop de fichiers ouverts |
24 |
ENOTTY |
Opération de contrôle d'E/S incorrecte |
25 |
EFBIG |
Fichier trop grand |
27 |
ENOSPC |
Aucun espace libre sur le périphérique |
28 |
ESPIPE |
Recherche non valide |
29 |
EROFS |
Système de fichiers en lecture seule |
30 |
EMLINK |
Trop de liens |
31 |
EPIPE |
Canal rompu |
32 |
EDOM |
Argument mathématique |
33 |
ERANGE |
Résultat trop volumineux |
34 |
EDEADLK |
Un blocage des ressources se produirait |
36 |
EDEADLOCK |
Identique à EDEADLK pour assurer la compatibilité avec les versions antérieures de Microsoft C |
36 |
ENAMETOOLONG |
Nom de fichier trop long |
38 |
ENOLCK |
Pas de verrous disponibles |
39 |
ENOSYS |
Fonction non prise en charge |
40 |
ENOTEMPTY |
Répertoire non vide |
41 |
EILSEQ |
Séquence d'octets non conforme |
42 |
STRUNCATE |
La chaîne a été tronquée |
80 |
Configuration requise
Macro globale |
En-tête requis |
En-tête facultatif |
---|---|---|
errno |
<errno.h> ou <stdlib.h>, <cerrno> ou <cstdlib> (C++) |
|
_doserrno, _sys_errlist, _sys_nerr |
<stdlib.h>, <cstdlib> (C++) |
<errno.h>, <cerrno> (C++) |
Les macros _doserrno, _sys_errlist et _sys_nerr sont des extensions Microsoft. Pour plus d'informations sur la compatibilité, voir Compatibilité.
Voir aussi
Référence
strerror, _strerror, _wcserror, __wcserror