errno, _doserrno, _sys_errlist, et _sys_nerr
ces codes d'erreur de blocage de variables globales utilisés par perror et strerror fonctionne pour imprimer des messages d'erreur.Les plus les versions fonctionnelles sécurisées répertoriées dans ce tableau doivent être utilisés à la place de leur variable globale.
variable globale |
équivalents fonctionnels |
---|---|
_doserrno |
|
_errno |
Ces variables sont déclarées dans STDLIB.H comme
extern int _doserrno;
extern int errno;
extern char *_sys_errlist[ ];
extern int _sys_nerr;
Notes
errno et _errno sont connectés à la même variable.errno est défini avec le code #define errno (*_errno())
errno est défini sur une erreur dans un appel au niveau de le système.Étant donné qu' errno contient la valeur pour le dernier appel qui la définit, cette valeur peut être modifiée en successif des appels.Toujours contrôle errno immédiatement avant et après un appel qui peut le définir.
Sur une erreur, errno n'est pas nécessairement pour valeur la même valeur que le code d'erreur est retournée par un appel système.Pour les opérations d'E/S, utilisez _doserrno d'accéder aux équivalents du système d'exploitation du code d'erreur de codes d' errno .Pour la plupart des opérations de non-I/O la valeur d' _doserrno est pas définie.
Chaque valeur d' errno est associée à un message d'erreur qui peut être imprimé à l'aide de perror soit enregistré dans une chaîne à l'aide de strerror.perror et strerror utilisent la matrice d' _sys_errlist et _sys_nerr, le nombre d'éléments dans _sys_errlist, pour gérer les informations sur l'erreur.
Les routines mathématiques de bibliothèque définissent errno en appelant _matherr.Pour gérer les erreurs mathématiques différemment, écrivez votre propre routine conformément à la description de référence d' _matherr et nommez _matherr.
toutes les valeurs d' errno , définies en tant que constantes prédéfinies dans ERRNO.H, sont UNIX-compatibles et sont répertoriées ci-dessous.Uniquement ERANGE, EILSEQ et EDOM sont spécifiés dans la norme ANSI.
Constante |
message d'erreur système |
Valeur |
---|---|---|
EPERM |
Opération non - autorisée |
1 |
ENOENT |
Aucun fichier ou répertoire |
2 |
ESRCH |
Aucun ces processus |
3 |
EINTR |
fonction interrompue |
4 |
EIO |
erreur d'E/S |
5 |
ENXIO |
Aucun périphérique ou adresse |
6 |
E2BIG |
Liste d'arguments trop long |
7 |
ENOEXEC |
Erreur de format d'exec |
8 |
EBADF |
Numéro de fichier incorrect |
9 |
ECHILD |
aucun processus engendrés |
10 |
EAGAIN |
Pas plus de processus ou pas assez de niveau d'imbrication de mémoire ou de la valeur maximale atteints |
11 |
ENOMEM |
pas assez de mémoire |
12 |
EACCES |
autorisation refusée |
13 |
EFAULT |
Adresse incorrecte |
14 |
EBUSY |
périphérique ou ressource occupée |
16 |
EEXIST |
le fichier existe |
17 |
EXDEV |
Lien sur un autre appareil |
18 |
ENODEV |
Aucun périphérique |
19 |
ENOTDIR |
Pas de 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 |
Fonctionnement du contrôle d'E/S incorrecte |
25 |
EFBIG |
fichier trop grand |
27 |
ENOSPC |
aucun espace laissé sur le périphérique |
28 |
ESPIPE |
Accès non valide |
29 |
EROFS |
Système de fichiers en lecture seule |
30 |
EMLINK |
trop de liens |
31 |
EPIPE |
canal rompu |
32 |
EDOM |
Argument de mathématiques |
33 |
ERANGE |
résultat trop grand |
34 |
EDEADLK |
l'interblocage de ressource se produirait |
36 |
EDEADLOCK |
De la même manière qu'EDEADLK pour compatibilité avec les versions antérieures de Microsoft C |
36 |
ENAMETOOLONG |
Nom de fichier trop long |
38 |
ENOLCK |
aucun 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é |
80 |