errno - Code de la dernière erreur
Bibliothèque C standard (libc, -lc)
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.
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.
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
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.
- ELNRNG
- 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 entre prériphériques non valalable (POSIX.1-2001).
- EXFULL
- Échange plein.
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.
errno(1), err(3), error(3), perror(3),
strerror(3)
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 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.