man errno (Fonctions bibliothèques) - Code de la dernière erreur.
NOM
errno - Code de la dernière erreur.
SYNOPSIS
#include <errno.h> extern int errno;
DESCRIPTION
La variable entière errno est renseignée par les appels systèmes (et quelques fonctions de bibliothèque) pour expliquer les conditions d'erreurs. Sa valeur n'est significative que lorsque l'appel système a échoué (généralement en renvoyant -1), car même en cas de réussite une fonction de bibliothèque peut modifier errno.
Parfois, si -1 est une valeur de retour légale, il faut positionner errno à 0 avant d'effectuer l'appel système, de manière à détecter une erreur éventuelle. C'est le cas par exemple de getpriority(2).
errno est définie par le standard ISO C comme une lvalue modifiable, de type int, et n'a pas besoin d'être définie explicitement. errno peut être une macro. errno est locale à un thread ; lui affecter une valeur dans un thread ne modifie pas sa valeur dans les autres threads.
Les codes d'erreurs valides sont tous non-nuls. errno n'est jamais mis à zéro par une fonction de la bibliothèque. Toutes les erreurs détaillées dans POSIX.1 doivent avoir des valeurs différentes.
POSIX.1 (édition 2001) définit les noms symboliques ci-dessous pour les codes d'erreurs. Parmi eux, EDOM et ERANGE sont également dans le standard C ISO. L'amendement 1 au standard C ISO définit également le code d'erreur EILSEQ pour les erreurs de codage dans les caractères étendus, ou multi-octets.
- E2BIG
- Liste d'arguments trop longue.
- EACCES
- Interdiction d'accès.
- EADDRINUSE
- Adresse déjà en cours d'utilisation.
- EADDRNOTAVAIL
- Adresse non disponible.
- EAFNOSUPPORT
- Famille d'adresses non supportée.
- EAGAIN
- Ressource temporairement indisponible.
- EALREADY
- Connexion déjà en cours.
- EBADF
- Mauvais descripteur de fichier.
- EBADMSG
- Mauvais message.
- EBUSY
- Ressource occupée.
- ECANCELED
- Opération annulée.
- ECHILD
- Pas de processus fils.
- ECONNABORTED
- Connexion abandonnée.
- ECONNREFUSED
- Connexion refusée.
- ECONNRESET
- Connexion réinitialisée.
- EDEADLK
- Blocage d'une ressource évité.
- EDESTADDRREQ
- Adresse de destination nécessaire.
- EDOM
- Erreur de domaine.
- EDQUOT
- Réservé
- EEXIST
- Fichier existant.
- EFAULT
- Mauvaise adresse.
- EFBIG
- Fichier trop grand.
- EHOSTUNREACH
- Hôte non accessible.
- EIDRM
- Identificateur de ressource supprimé.
- EILSEQ
- Séquence d'octets illégale.
- EINPROGRESS
- Opération en cours.
- EINTR
- Appel système interrompu.
- EINVAL
- Argument invalide.
- EIO
- Erreur d'entrée-sortie.
- EISCONN
- La socket est connectée.
- EISDIR
- Est un répertoire.
- ELOOP
- Trop de liens symboliques rencontrés.
- EMFILE
- Trop de fichiers ouverts.
- EMLINK
- Trop de liens symboliques.
- EMSGSIZE
- Longueur du tampon de message inappropriée.
- EMULTIHOP
- Réservé.
- ENAMETOOLONG
- Nom de fichier trop long.
- ENETDOWN
- Le réseau est désactivé.
- ENETRESET
- Connexion annulée par le réseau.
- ENETUNREACH
- Réseau inaccessible.
- ENFILE
- Trop de fichiers ouverts sur le système.
- ENOBUFS
- Plus de tampons disponibles.
- ENODATA
- Pas de message disponible dans la file STREAM.
- ENODEV
- Périphérique inexistant.
- ENOENT
- Fichier ou répertoire inexistant.
- ENOEXEC
- Exécution impossible.
- ENOLCK
- Pas de verrou disponible.
- ENOLINK
- Réservé.
- ENOMEM
- Pas assez de mémoire.
- ENOMSG
- Pas de message du type attendu.
- ENOTPROTOOPT
- Protocole indisponible.
- ENOSPC
- Plus de place sur le périphérique.
- ENOSR
- Pas de ressource STREAM.
- ENOSTR
- Pas un STREAM.
- ENOSYS
- Fonction non implémentée.
- ENOTCONN
- La socket n'est pas connectée.
- ENOTDIR
- Pas un répertoire.
- ENOTEMPTY
- Répertoire non vide.
- ENOTSOCK
- Pas une socket.
- ENOTSUP
- Opération non supportée.
- ENOTTY
- Opération de contrôle d'entrée-sortie invalide.
- ENXIO
- Périphérique ou adresse inexistant.
- EOPNOTSUPP
- Opération non supportée par la socket.
- EOVERFLOW
- Valeur trop grande pour le type de donnée.
- EPERM
- Opération interdite.
- EPIPE
- Tube sans lecteur.
- EPROTO
- Erreur de protocole.
- EPROTONOSUPPORT
- Protocole non supporté.
- EPROTOTYPE
- Mauvais type de protocole pour la socket.
- ERANGE
- Résultat trop grand.
- EROFS
- Système de fichiers en lecture-seule.
- ESPIPE
- Recherche invalide.
- ESRCH
- Processus inexistant.
- ESTALE
- Réservé.
- ETIME
- Dépassement du délai ioctl() STREAM.
- ETIMEDOUT
- Délai maximal écoulé.
- ETXTBSY
- Fichier exécutable occupé.
- EWOULDBLOCK
- L'opération serait bloquante (même valeur que EAGAIN)
- EXDEV
- Lien inapproprié.
NOTE
Une erreur fréquente est de faire
if (unappel() == -1) { printf("unappel() a échoué\n"); if (errno == ...) { ... } }
où errno n'a plus la valeur qu'elle avait juste après le retour de unappel(). Si la valeur de errno doit être préservée à travers un appel bibliothèque, elle doit être sauvegardée :
if (unappel() == -1) { int errsv = errno; printf("unappel() a échoué\n"); if (errsv == ...) { ... } }
VOIR AUSSI
TRADUCTION
Christophe Blaess, 1996-2003.