ERRNO

Section : Manuel du programmeur Linux (3)
Mise à jour de la version anglaise : 9 février 2006
Index Menu principal  

NOM

errno - Code de la dernière erreur  

SYNOPSIS

#include <errno.h>  

DESCRIPTION

Le fichier d'entête <errno.h> définit la variable entière errno qui est renseignée par les appels système (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 définir errno à 0 avant d'effectuer l'appel système, de manière à détecter une erreur éventuelle.

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 mise à zéro par une fonction de la bibliothèque. Toutes les erreurs détaillées dans POSIX.1 doivent avoir des valeurs différentes, à l'exception de EAGAIN et EWOULDBLOCK, qui peuvent avoir la même valeur.

Ci-dessous une liste des noms symboliques d'erreur qui sont définis sous Linux. Certains sont marqués POSIX.1 indiquant que le nom est défini par POSIX.1-2001, ou C99, indiquant que le nom est défini par C99.

E2BIG
Liste d'arguments trop longue (POSIX.1).
EACCES
Permission refusée (POSIX.1)
EADDRINUSE
Adresse déjà en cours d'utilisation (POSIX.1)
EADDRNOTAVAIL
Adresse non disponible (POSIX.1)
EAFNOSUPPORT
Famille d'adresses non supportée (POSIX.1)
EAGAIN
Ressource temporairement indisponible (peut être la même valeur que EWOULDBLOCK) (POSIX.1)
EALREADY
Connexion déjà en cours (POSIX.1)
EBADE
Échange invalide.
EBADF
Mauvais descripteur de fichier (POSIX.1)
EBADFD
Descripteur de fichier en mauvais état
EBADMSG
Mauvais message (POSIX.1)
EBADR
Descripteur de requête invalide
EBADRQC
Code de requête invalide
EBADSLT
Emplacement (Ndt : slot) invalide
EBUSY
Ressource ou périphérique occupé (POSIX.1)
ECANCELED
Opération annulée (POSIX.1)
ECHILD
Pas de processus fils (POSIX.1)
ECHRNG
Numéro de canal hors d'intervalle
ECOMM
Erreur de communication à l'envoi
ECONNABORTED
Connexion abandonnée (POSIX.1)
ECONNREFUSED
Connexion refusée (POSIX.1)
ECONNRESET
Connexion réinitialisée (POSIX.1)
EDEADLK
Blocage d'une ressource évité (POSIX.1)
EDEADLOCK
Synonyme de EDEADLK
EDESTADDRREQ
Adresse de destination nécessaire (POSIX.1)
EDOM
Argument mathématique hors du domaine de définition de la fonction (POSIX.1, C99)
EDQUOT
Quota disque dépassé (POSIX.1)
EEXIST
Fichier existant (POSIX.1)
EFAULT
Mauvaise adresse (POSIX.1)
EFBIG
Fichier trop grand (POSIX.1)
EHOSTDOWN
Hôte éteint.
EHOSTUNREACH
Hôte non accessible (POSIX.1)
EIDRM
Identificateur supprimé (POSIX.1)
EILSEQ
Séquence d'octets illégale (POSIX.1, C99)
EINPROGRESS
Opération en cours (POSIX.1)
EINTR
Appel système interrompu (POSIX.1) ; voir signal(7)
EINVAL
Argument invalide (POSIX.1)
EIO
Erreur d'entrée-sortie (POSIX.1)
EISCONN
La socket est connectée (POSIX.1)
EISDIR
Est un répertoire (POSIX.1)
EISNAM
Est un fichier de type nommé
EKEYEXPIRED
La clé a expiré.
EKEYREJECTED
La clé a été rejetée par le service
EKEYREVOKED
La clé a été révoquée
EL2HLT
Niveau 2 arrêté
EL2NSYNC
Niveau 2 non synchronisé
EL3HLT
Niveau 3 arrêté
EL3RST
Niveau 3 arrêté
ELIBACC
Impossible d'accéder à une bibliothèque partagée requise
ELIBBAD
Accès à une bibliothèque partagée corrompue
ELIBMAX
Tentative de lier avec trop de bibliothèques partagées
ELIBSCN
Section lib dans a.out corrompue
ELIBEXEC
Impossible d'exécuter directement une bibliothèque partagée
ELOOP
Trop de niveaux de liens symboliques rencontrés (POSIX.1)
EMEDIUMTYPE
Mauvais type de medium
EMFILE
Trop de fichiers ouverts (POSIX.1)
EMLINK
Trop de liens symboliques (POSIX.1)
EMSGSIZE
Message trop long (POSIX.1)
EMULTIHOP
Tentative de saut multiple « Multihop  » (POSIX.1)
ENAMETOOLONG
Nom de fichier trop long (POSIX.1)
ENETDOWN
Le réseau est désactivé (POSIX.1)
ENETRESET
Connexion annulée par le réseau (POSIX.1)
ENETUNREACH
Réseau inaccessible (POSIX.1)
ENFILE
Trop de fichiers ouverts sur le système (POSIX.1)
ENOBUFS
Plus de tampons disponibles (POSIX.1 (XSI STREAMS option))
ENODATA
Pas de message disponible dans la file STREAM (POSIX.1)
ENODEV
Périphérique inexistant (POSIX.1)
ENOENT
Fichier ou répertoire inexistant (POSIX.1)
ENOEXEC
Erreur de format d'exécution (POSIX.1)
ENOKEY
La clé requise n'est pas disponible
ENOLCK
Pas de verrou disponible (POSIX.1)
ENOLINK
Le lien a été coupé (POSIX.1)
ENOMEDIUM
Aucun medium trouvé.
ENOMEM
Pas assez de mémoire (POSIX.1)
ENOMSG
Pas de message du type attendu (POSIX.1)
ENONET
La machine n'est pas sur le réseau
ENOPKG
Le paquet n'est pas installé
ENOPROTOOPT
Protocole indisponible (POSIX.1)
ENOSPC
Plus de place sur le périphérique (POSIX.1)
ENOSR
Pas de ressource STREAM (POSIX.1 (option STREAMS XSI))
ENOSTR
Pas un STREAM (POSIX.1 (option STREAMS XSI))
ENOSYS
Fonction non implémentée (POSIX.1)
ENOTBLK
Périphérique de bloc requis
ENOTCONN
La socket n'est pas connectée (POSIX.1)
ENOTDIR
Pas un répertoire (POSIX.1)
ENOTEMPTY
Répertoire non vide (POSIX.1)
ENOTSOCK
Pas une socket (POSIX.1)
ENOTSUP
Opération non supportée (POSIX.1)
ENOTTY
Opération de contrôle d'entrée-sortie invalide (POSIX.1)
ENOTUNIQ
Le nom sur le réseau n'est pas unique
ENXIO
Périphérique ou adresse inexistant (POSIX.1)
EOPNOTSUPP
Opération non supportée par la socket (POSIX.1)

(ENOTSUP et EOPNOTSUPP ont la même valeur sous Linux, mais comformément à POSIX.1 ces valeurs d'erreurs doivent être distinctes.)

EOVERFLOW
Valeur trop grande être stocké dans ce type de donnée (POSIX.1)
EPERM
Opération interdite (POSIX.1)
EPFNOSUPPORT
Famille de protocole non supportée
EPIPE
Tube brisé (POSIX.1)
EPROTO
Erreur de protocole (POSIX.1)
EPROTONOSUPPORT
Protocole non supporté (POSIX.1)
EPROTOTYPE
Mauvais type de protocole pour la socket (POSIX.1)
ERANGE
Résultat trop grand (POSIX.1, C99)
EREMCHG
L'adresse distante a changé
EREMOTE
L'objet est distant
EREMOTEIO
Erreur d'entrées-sorties distante
ERESTART
L'appel système interrompu devrait être relancé
EROFS
Système de fichiers en lecture seule (POSIX.1)
ESHUTDOWN
Impossible d'envoyer après l'arrêt du point final du transport
ESPIPE
Recherche invalide (POSIX.1)
ESOCKTNOSUPPORT
Type de socket non supporté
ESRCH
Processus inexistant.
ESTALE
Descripteur de fichier éventé (POSIX.1)

Cette erreur peut se produire pour NFS et d'autres systèmes de fichiers.

ESTRPIPE
Erreur de tube flux
ETIME
Temporisation expirée (POSIX.1 (XSI STREAMS option))

(POSIX.1 dit « Dépassement du délai ioctl(2) STREAM ».

ETIMEDOUT
Délai maximal de connexion écoulé (POSIX.1)
ETXTBSY
Fichier texte occupé
EUCLEAN
La structure a besoin d'être nettoyée
EUNATCH
Le pilote de protocole n'est pas attaché
EUSERS
Trop d'utilisateurs
EWOULDBLOCK
L'opération serait bloquante (même valeur que EAGAIN) (POSIX.1)
EXDEV
Lien inapproprié (POSIX.1)
EXFULL
Échange complet
 

NOTES

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() (c'est-à-dire qu'elle peut avoir été modifiée par printf(3)). 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 == ...) { ... }
}

Il est classique, dans le C traditionnel, de déclarer errno manuellement (c'est-à-dire, extern int errno) au lieu d'inclure <errno.h>. Ne faites pas ceci. Cela ne fonctionnera pas avec les versions récentes de la bibliothèque C. Toutefois, sur de (très) vieux systèmes UNIX, <errno.h> peut ne pas exister, auquel cas la déclaration est nécessaire.  

VOIR AUSSI

err(3), error(3), perror(3), strerror(3)  

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 23 octobre 1996 et révisée le 17 juillet 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 errno ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.

 

Index

NOM
SYNOPSIS
DESCRIPTION
NOTES
VOIR AUSSI
TRADUCTION

Dernière mise à jour : 17 juillet 2008