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 == ...) { ... } }

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.