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 de type entier errno qui est renseignée par les appels système et quelques fonctions de bibliothèque pour décrire les conditions de la survenue d'une erreur.

  errno
La valeur de errno n'est significative que lorsque la valeur de retour de 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) ; une fonction qui réussit est autorisée à modifier errno. La valeur de errno n'est jamais mis à zéro par un appel système ou une 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 en positionnant errno à zéro avant l'appel, puis, quand l'appel renvoie 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 la norme 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.

  Numéros d'erreur et noms
Les numéros d'erreur valables sont tous des nombres positifs. Le fichier d'en-tête <errno.h> définit les noms symboliques pour chacun des numéros d'erreur possibles pouvant apparaître dans errno.

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. Sur Linux, ces deux erreurs ont la même valeur sur toutes les architectures.

Les numéros d'erreur qui correspondent à chaque nom symbolique varient selon les systèmes UNIX et c'est même le cas sous Linux pour des architectures différentes. Par conséquent, les valeurs numériques ne sont pas indiquées dans la liste des noms d'erreur ci-dessous. Les fonctions perror(3) et strerror(3) peuvent être utilisées pour convertir ces noms en leur message d'erreur textuel correspondant.

Il est possible, sur n'importe quel système Linux, d'obtenir la liste de tous les noms d'erreurs symboliques et leurs numéros d'erreur correspondant en utilisant la commande errno(1) (faisant partie du paquet moreutils) :

    $ errno -l
    EPERM 1 Opération interdite
    ENOENT 2 Fichier ou répertoire inexistant
    ESRCH 3 Processus inexistant
    EINTR 4 Appel système interrompu
    EIO 5 Erreur d'entrée/sortie
    ...

La commande errno(1) peut également être utilisée pour rechercher des numéros et noms d'erreurs spécifiques, ainsi que chercher des erreurs en utilisant les chaînes de description de l'erreur, comme dans l'exemple suivant :

    $ errno 2
    ENOENT 2 Fichier ou répertoire inexistant
    $ errno ESRCH
    ESRCH 3 Processus inexistant
    $ errno -s permission
    EACCES 13 Permission refusée

  Liste des noms d'erreur
Dans la liste des noms d'erreurs symboliques ci-dessous, plusieurs noms sont marqués comme suit :

–   POSIX.1-2001 : Le nom est défini par POSIX.1-2001 et est défini dans les versions ultérieures de POSIX.1 à moins qu'il ne soit indiqué autre chose.

–   POSIX.1-2008 : Le nom est défini dans POSIX.1-2008 mais n'est pas présent dans les normes POSIX.1 antérieures.

–   C99 : Le nom est définit par C99.

Ci-dessous se trouve une liste des noms d'erreurs symboliques qui sont définies sous Linux :

E2BIG
    Liste d'arguments trop longue (POSIX.1-2001).

EACCES
    Permission refusée (POSIX.1-2001)

EADDRINUSE
    Adresse déjà en cours d'utilisation (POSIX.1-2001).

EADDRNOTAVAIL
    Adresse non disponible (POSIX.1-2001).

EAFNOSUPPORT
    Famille d'adresses non prise en charge (POSIX.1-2001).

EAGAIN
    Ressource temporairement indisponible (peut être la même valeur que EWOULDBLOCK) (POSIX.1-2001)

EALREADY
    Connexion déjà en cours (POSIX.1-2001).

EBADE
    Échange non valable.

EBADF
    Mauvais descripteur de fichier (POSIX.1-2001).

EBADFD
    Descripteur de fichier dans un mauvais état.

EBADMSG
    Mauvais message (POSIX.1-2001).

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-2001).

ECANCELED
    Opération annulée (POSIX.1-2001).

ECHILD
    Pas de processus enfant (POSIX.1-2001).

ECHRNG
    Numéro de canal hors intervalle.

ECOMM
    Échec de la communication lors de l'envoi.

ECONNABORTED
    Connexion abandonnée (POSIX.1-2001).

ECONNREFUSED
    Connexion refusée (POSIX.1-2001).

ECONNRESET
    Connexion réinitialisée (POSIX.1-2001).

EDEADLK
    Blocage d'une ressource évité (POSIX.1-2001).

EDEADLOCK
    Un synonyme de EDEADLK sur la plupart des architectures. Sur quelques architectures (comme Linux MIPS, PowerPC, SPARC), il s'agit d'un code d'erreur distinct « Erreur de blocage de verrou de fichier ».

EDESTADDRREQ
    Adresse de destination nécessaire (POSIX.1-2001).

EDOM
    Argument mathématique hors du domaine de définition de la fonction (POSIX.1, C99).

EDQUOT
    Quota du disque dépassé (POSIX.1-2001).

EEXIST
    Fichier existant (POSIX.1-2001).

EFAULT
    Mauvaise adresse (POSIX.1-2001).

EFBIG
    Fichier trop grand (POSIX.1-2001).

EHOSTDOWN
    Hôte éteint.

EHOSTUNREACH
    Hôte non accessible (POSIX.1-2001).

EHWPOISON
    Une page mémoire a une erreur matérielle.

EIDRM
    Identificateur supprimé (POSIX.1-2001).

EILSEQ
    Multi-octet ou caractère large non autorisé ou incomplet (POSIX.1, C99).

    Le texte montré ici correspond à la description des erreurs de la glibc ; cette erreur est décrite dans POSIX.1 comme « Séquence d'octet illégale ».

EINPROGRESS
    Opération en cours (POSIX.1-2001).

EINTR
    Appel système interrompu (POSIX.1-2001) ; consultez signal(7).

EINVAL
    Argument non valable (POSIX.1-2001).

EIO Erreur d'entrée/sortie (POSIX.1-2001).

EISCONN
    Socket connecté (POSIX.1-2001).

EISDIR
    Est un répertoire (POSIX.1-2001).

EISNAM
    Est un fichier de type nommé.

EKEYEXPIRED
    Clé expirée.

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 réinitialisé.

ELIBACC
    Impossible d'accéder à une bibliothèque partagée requise.

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.

ELNRANGE
    Numéro de lien hors d’intervalle.

ELOOP
    Trop de niveaux de liens symboliques (POSIX.1-2001).

EMEDIUMTYPE
    Mauvais type de média.

EMFILE
    Trop de fichiers ouverts (POSIX.1-2001). Communément causée par un dépassement de la limite de ressource RLIMIT_NOFILE décrite dans getrlimit(2). Peut aussi être causée par un dépassement de la limite spécifiée dans /proc/sys/fs/nr_open.

EMLINK
    Trop de liens (POSIX.1-2001).

EMSGSIZE
    Message trop long (POSIX.1-2001).

EMULTIHOP
    Tentative de sauts multiples « Multihop » (POSIX.1-2001).

ENAMETOOLONG
    Nom de fichier trop long (POSIX.1-2001).

ENETDOWN
    Le réseau est désactivé (POSIX.1-2001).

ENETRESET
    Connexion annulée par le réseau (POSIX.1-2001).

ENETUNREACH
    Réseau inaccessible (POSIX.1-2001).

ENFILE
    Trop de fichiers ouverts pour le système (POSIX.1-2001). Sur Linux, cela est probablement dû au dépassement de la limite /proc/sys/fs/file-max (consultez proc(5)).

ENOANO
    Pas de nœud d'index.

ENOBUFS
    Aucun espace de tampon disponible (POSIX.1 (option des FLUX XSI)).

ENODATA
    L'attribut nommé n'existe pas ou le processus n'a pas accès à cet attribut, consultez xattr(7).

    Dans POSIX.1-2001 (option XSI STREAMS), cette erreur est décrite comme « Aucun message n'est disponible sur la tête de la queue de lecture du FLUX ».

ENODEV
    Périphérique inexistant (POSIX.1-2001).

ENOENT
    Fichier ou répertoire inexistant (POSIX.1-2001).

    Typiquement, cette erreur survient lors qu'un nom de chemin indiqué n'existe pas, ou que l'un des composants dans le préfixe de répertoire d'un nom de chemin n'existe pas, ou que le nom de chemin indiqué est un lien symbolique sans cible.

ENOEXEC
    Erreur de format d'exécution (POSIX.1-2001).

ENOKEY
    Clé nécessaire non disponible.

ENOLCK
    Pas de verrou disponible (POSIX.1-2001).

ENOLINK
    Un lien a été disjoint (POSIX.1-2001).

ENOMEDIUM
    Aucun média trouvé.

ENOMEM
    Pas assez de mémoire, impossible d'allouer de la mémoire (POSIX.1-2001).

ENOMSG
    Pas de message du type attendu (POSIX.1-2001).

ENONET
    La machine n'est pas sur le réseau.

ENOPKG
    Paquet non installé.

ENOPROTOOPT
    Protocole indisponible (POSIX.1-2001).

ENOSPC
    Plus de place sur le périphérique (POSIX.1-2001).

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-2001).

ENOTBLK
    Périphérique bloc nécessaire.

ENOTCONN
    Le socket n'est pas connecté (POSIX.1-2001).

ENOTDIR
    Pas un répertoire (POSIX.1-2001).

ENOTEMPTY
    Répertoire non vide (POSIX.1-2001).

ENOTRECOVERABLE
    État non récupérable (POSIX.1-2008).

ENOTSOCK
    Pas un socket (POSIX.1-2001).

ENOTSUP
    Opération non prise en charge (POSIX.1-2001).

ENOTTY
    Opération de contrôle d'entrée/sortie inadéquate (POSIX.1-2001).

ENOTUNIQ
    Le nom sur le réseau n'est pas unique.

ENXIO
    Périphérique ou adresse inexistant (POSIX.1-2001).

EOPNOTSUPP
    Opération non prise en charge par le socket (POSIX.1-2001).

    (ENOTSUP et EOPNOTSUPP ont la même valeur sous Linux, mais selon POSIX.1, ces codes d'erreurs devraient être différents).

EOVERFLOW
    Valeur trop grande pour être stockée dans ce type de donnée (POSIX.1-2001).

EOWNERDEAD
    Propriétaire disparu (POSIX.1-2008).

EPERM
    Opération interdite (POSIX.1-2001).

EPFNOSUPPORT
    Famille de protocoles non prise en charge.

EPIPE
    Tube cassé (POSIX.1-2001).

EPROTO
    Erreur de protocole (POSIX.1-2001).

EPROTONOSUPPORT
    Protocole non pris en charge (POSIX.1-2001).

EPROTOTYPE
    Mauvais type de protocole pour le socket (POSIX.1-2001).

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é.

ERFKILL
    Opération impossible à cause de RF-kill.

EROFS
    Système de fichiers en lecture seule (POSIX.1-2001).

ESHUTDOWN
    Impossible d'effectuer l'envoi après l'arrêt du point final du transport.

ESPIPE
    Recherche non valable (POSIX.1-2001).

ESOCKTNOSUPPORT
    Type de socket non pris en charge.

ESRCH
    Processus inexistant (POSIX.1-2001).

ESTALE
    Gestion de fichier périmée (POSIX.1-2001).

    Cette erreur peut se produire avec le système de fichiers NFS et d'autres.

ESTRPIPE
    Tube de flux cassé.

ETIME
    Délai expiré (POSIX.1 (option des FLUX XSI)).

    (POSIX.1 stipule « délai du FLUX ioctl(2) dépassé.)

ETIMEDOUT
    Délai maximal de connexion écoulé (POSIX.1-2001).

ETOOMANYREFS
    Trop de références : impossible de copier (splice).

ETXTBSY
    Fichier texte occupé (POSIX.1-2001).

EUCLEAN
    La structure nécessite un nettoyage.

EUNATCH
    Pilote du protocole non attaché.

EUSERS
    Trop d'utilisateurs.

EWOULDBLOCK
    L'opération serait bloquante (peut être la même valeur que EAGAIN) (POSIX.1-2001).

EXDEV
    Lien inapproprié (POSIX.1-2001).

EXFULL
    Échange plein.

NOTES
Une erreur fréquente est de faire

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

où 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 :

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

Notez que les API de fil d'exécution POSIX ne positionnent pas errno en cas d'erreur mais elles renvoient pour résultat le numéro de l'erreur. Ces numéros d'erreur ont la même signification que les numéros d'erreur indiqués dans errno par d'autres API.

Sur d'anciens systèmes, <errno.h> n'est pas présent ou ne déclare pas errno si bien qu'il est nécessaire de déclarer errno manuellement (avec extern int errno). Ne faites pas cela. Cela a cessé d'être le cas il y a bien longtemps et cause des problèmes avec les versions modernes de la bibliothèque C.

VOIR AUSSI
errno(1), err(3), error(3), perror(3), strerror(3)

COLOPHON
Cette page fait partie de la publication 5.13 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Grégoire Scano <gregoire.scano@malloc.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.