ERRNO(3)

NOM
errno - Code de la dernière erreur

SYNOPSIS
#include <errno.h>

DESCRIPTION
Le fichier d'en-tê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. 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 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 être les mêmes Ci-desous 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 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 de ressource 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).

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
    Accession à une bibliothèque partagée corrompue.

ELIBMAX
    Tentative de lier dans 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 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
    Longueur du tampon de message inappropriée (POSIX.1).

EMULTIHOP
    Multihop tenté (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
    Exécution impossible (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é.

ENOTPROTOOPT
    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 pour le type de donnée (POSIX.1).

EPERM
    Opération interdite (POSIX.1).

EPFNOSUPPORT
    Famille de protocole non supportée.

EPIPE
    Tube sans lecteur (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 la désactivation du point limite 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 survenir 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 == ...) { ... }
    }
où 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 22 décembre 2007.

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.