1. NOM

errno - Code de la dernière erreur

2. SYNOPSIS

#include <errno.h>

3. 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 décrire les conditions d'erreurs. Sa valeur n'est significative que lorsque la valeur de retour l'appel système indique une erreur (c'est-à-dire -1 pour la plupart des appels système ; -1 ou NULL pour la plupart des fonctions de bibliothèque) ; en cas de réussite une fonction de bibliothèque peut modifier errno. Les numéros d'erreur correctes son tous non nuls ; errno n'est mis à zéro par aucun appel système ou fonction de bibliothèque. Pour certains appels système et fonctions de bibliothèque (par exemple getpriority(2)), -1 est une valeur de retour correcte en cas de réussite. Dans de tels cas, une valeur de retour en cas de réussite peut être distinguée d'un cas d'erreur est positionnant errno à zéro avant l'appel, puis, quand l'appel fourni une valeur qui indique qu'une erreur a pu se produire, en vérifiant si errno a une valeur non nulle. 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. 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, un liste des noms d'erreurs symboliques qui sont définis sous Linux. Certains sont marqués avec POSIX.1, cela signifie que POSIX.1-2001 les définit, ceux marqués avec C99, sont définis 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 dans un mauvais état
  • EBADMSG
        Mauvais message (POSIX.1)
  • EBADR
        Descripteur de requête non valable
  • EBADRQC
        Code de requête non valable
  • EBADSLT Emplacement (« Slot ») non valable
  • EBUSY
        Périphérique ou ressource indisponible (POSIX.1)
  • ECANCELED
        Opération annulée (POSIX.1)
  • ECHILD
        Pas de processus fils (POSIX.1)
  • ECHRNG
        Numéro de voie hors du domaine de définition
  • ECOMM
        Échec de la communication lors de 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 du 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) ; consultez 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 nommé
  • EKEYEXPIRED
        Clé expirée
  • EKEYREJECTED
        La clé a été rejeté 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 à la bibliothèque partagée nécessaire
  • ELIBBAD
        Accès à une bibliothèque partagée corrompue
  • ELIBMAX
        Tentative de liaison 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 niveau de liens symboliques rencontrés (POSIX.1)
  • EMEDIUMTYPE
        Mauvais type de médium
  • 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 (option des FLUX XSI))
  • ENODATA
        Pas de message disponible en tête de la queue de lecture du FLUX (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
        Clé nécessaire non disponible
  • ENOLCK
        Pas de verrou disponible (POSIX.1)
  • ENOLINK Un lien a été disjoint (POSIX.1)
  • ENOMEDIUM
        Aucun média 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
        Paquet non installé
  • ENOPROTOOPT
        Protocole indisponible (POSIX.1)
  • ENOSPC
        Plus de place sur le périphérique (POSIX.1)
  • ENOSR
        Pas de ressources FLUX (POSIX.1 (option des FLUX XSI))
  • ENOSTR
        Pas un FLUX (POSIX.1 (option des FLUX XSI))
  • ENOSYS
        Fonction non implémentée (POSIX.1)
  • ENOTBLK
        Périphérique de bloc nécessaire
  • 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 selon POSIX.1, ces codes d'erreurs doivent être différents).
  • EOVERFLOW
        Valeur trop grande pour être sauvé dans ce type de donnée (POSIX.1)
  • EPERM
        Opération interdite (POSIX.1)
  • EPFNOSUPPORT
        Famille de protocole non supportée
  • EPIPE
        Tube cassé (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
        Adresse distante changée
  • 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'effectuer l'envoi après l'arrêt du point final du transport
  • ESPIPE
        Recherche invalide (POSIX.1)
  • ESOCKTNOSUPPORT
        Type de socket non supporté
  • ESRCH Processus inexistant (POSIX.1)
  • ESTALE
        Vieux descripteur de fichier (POSIX.1)

    Cette erreur peut se produire avec le système de fichiers NFS et d'autres
  • ESTRPIPE
        Tube de flux cassé
  • ETIME
        Compteur de temps écoulé (POSIX.1 (option des FLUX XSI))

    (POSIX.1 dit « délai du FLUX ioctl(2) dépassé)
  • ETIMEDOUT Délai maximal de connexion écoulé (POSIX.1)
  • ETXTBSY
        Fichier texte occupé (POSIX.1)
  • EUCLEAN
        La structure nécessite un nettoyage
  • EUNATCH
        Protocole indisponible
  • EUSERS
        Trop d'utilisateurs
  • EWOULDBLOCK
        L'opération serait bloquante (peut être la même valeur que EAGAIN) (POSIX.1)
  • EXDEV
        Lien inapproprié (POSIX.1)
  • EXFULL
        Échange plein

4. NOTES

Une erreur fréquente est de faire

 
Sélectionnez
if (somecall() == -1) {
    printf("somecall() failed\n");
    if (errno == ...) { ... }
}

errno n'a plus besoin de la valeur qu'elle avait juste après le retour de somecall() (par exemple, elle peut être changée par printf(3)). Si la valeur de errno doit être préservée à travers un appel bibliothèque, elle doit être sauvegardée :

 
Sélectionnez
if (somecall() == -1) {
    int errsv = errno;
    printf("somecall() failed\n");
    if (errsv == ...) { ... }
}

C'est commun en C traditionnel de déclarer errno manuellement (par exemple, extern int errno) au lieu d'inclure <errno.h>. Ne faites pas cela. Cela ne fonctionnera pas avec les versions modernes des bibliothèque C. Toutefois, sur de (très) vieux systèmes UNIX, il peut ne pas y avoir de <errno.h> et dans ce cas la déclaration est nécessaire.

5. VOIR AUSSI

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

6. COLOPHON

Cette page fait partie de la publication 3.52 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

7. TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».