Scroll to navigation

ERRNO(3) Manuel du programmeur Linux 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 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.

Liste d'arguments trop longue (POSIX.1)
Permission refusée (POSIX.1)
Adresse déjà en cours d'utilisation (POSIX.1)
Adresse non disponible (POSIX.1)
Famille d'adresses non supportée (POSIX.1)
Ressource temporairement indisponible (peut être la même valeur que EWOULDBLOCK) (POSIX.1)
Connexion déjà en cours (POSIX.1)
Échange invalide
Mauvais descripteur de fichier (POSIX.1)
Descripteur de fichier dans un mauvais état
Mauvais message (POSIX.1)
Descripteur de requête non valable
Code de requête non valable
Emplacement (« Slot ») non valable
Périphérique ou ressource indisponible (POSIX.1)
Opération annulée (POSIX.1)
Pas de processus fils (POSIX.1)
Numéro de voie hors du domaine de définition
Échec de la communication lors de l'envoi
Connexion abandonnée (POSIX.1)
Connexion refusée (POSIX.1)
Connexion ré-initialisée (POSIX.1)
Blocage d'une ressource évité (POSIX.1)
Synonyme de EDEADLK
Adresse de destination nécessaire (POSIX.1)
Argument mathématique hors du domaine de définition de la fonction (POSIX.1, C99)
Quota du disque dépassé (POSIX.1)
Fichier existant (POSIX.1)
Mauvaise adresse (POSIX.1)
Fichier trop grand (POSIX.1)
Hôte éteint
Hôte non accessible (POSIX.1)
Identificateur supprimé (POSIX.1)
Séquence d'octets illégale (POSIX.1, C99)
Opération en cours (POSIX.1)
Appel système interrompu (POSIX.1) ; voir signal(7).
Argument invalide (POSIX.1)
Erreur d'entrée/sortie (POSIX.1)
La socket est connectée (POSIX.1)
Est un répertoire (POSIX.1)
Est un fichier nommé
Clé expirée
La clé a été rejeté par le service
La clé a été révoquée
Niveau 2 arrêté
Niveau 2 non synchronisé
Niveau 3 arrêté
Niveau 3 arrêté
Impossible d'accéder à la bibliothèque partagée nécessaire
Accès à une bibliothèque partagée corrompue
Tentative de liaison avec trop de bibliothèques partagées
Section lib dans a.out corrompue
Impossible d'exécuter directement une bibliothèque partagée
Trop de niveau de liens symboliques rencontrés (POSIX.1)
Mauvais type de médium
Trop de fichiers ouverts (POSIX.1)
Trop de liens symboliques (POSIX.1)
Message trop long (POSIX.1)
Tentative de saut multiple « Multihop » (POSIX.1)
Nom de fichier trop long (POSIX.1)
Le réseau est désactivé (POSIX.1)
Connexion annulée par le réseau (POSIX.1)
Réseau inaccessible (POSIX.1)
Trop de fichiers ouverts sur le système (POSIX.1)
Plus de tampons disponibles (POSIX.1 (option des FLUX XSI))
Pas de message disponible en tête de la queue de lecture du FLUX (POSIX.1)
Périphérique inexistant (POSIX.1)
Fichier ou répertoire inexistant (POSIX.1)
Erreur de format d'exécution (POSIX.1)
Clé nécessaire non disponible
Pas de verrou disponible (POSIX.1)
Un lien a été disjoint (POSIX.1)
Aucun média trouvé
Pas assez de mémoire (POSIX.1)
Pas de message du type attendu (POSIX.1)
La machine n'est pas sur le réseau
Paquet non installé
Protocole indisponible (POSIX.1)
Plus de place sur le périphérique (POSIX.1)
Pas de ressources FLUX (POSIX.1 (option des FLUX XSI))
Pas un FLUX (POSIX.1 (option des FLUX XSI))
Fonction non implémentée (POSIX.1)
Périphérique de bloc nécessaire
La socket n'est pas connectée (POSIX.1)
Pas un répertoire (POSIX.1)
Répertoire non vide (POSIX.1)
Pas une socket (POSIX.1)
Opération non supportée (POSIX.1)
Opération de contrôle d'entrée/sortie invalide (POSIX.1)
Le nom sur le réseau n'est pas unique
Périphérique ou adresse inexistant (POSIX.1)
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).

Valeur trop grande pour être sauvé dans ce type de donnée (POSIX.1)
Opération interdite (POSIX.1)
Famille de protocole non supportée
Tube cassé (POSIX.1)
Erreur de protocole (POSIX.1)
Protocole non supporté (POSIX.1)
Mauvais type de protocole pour la socket (POSIX.1)
Résultat trop grand (POSIX.1, C99)
Adresse distante changée
L'objet est distant
Erreur d'entrées-sorties distante
L'appel système interrompu devrait être relancé
Système de fichiers en lecture seule (POSIX.1)
Impossible d'effectuer l'envoi après l'arrêt du point final du transport
Recherche invalide (POSIX.1)
Type de socket non supporté
Processus inexistant (POSIX.1)
Vieux descripteur de fichier (POSIX.1)

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

Tube de flux cassé
Compteur de temps écoulé (POSIX.1 (option des FLUX XSI))

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

Délai maximal de connexion écoulé (POSIX.1)
Fichier texte occupé (POSIX.1)
La structure nécessite un nettoyage
Protocole indisponible
Trop d'utilisateurs
L'opération serait bloquante (peut être la même valeur que EAGAIN) (POSIX.1)
Lien inapproprié (POSIX.1)
Échange plein

NOTES

Une erreur fréquente est de faire

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 :

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

VOIR AUSSI

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

COLOPHON

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

TRADUCTION

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

Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <URL: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 à <perkamon-l10n-fr@lists.alioth.debian.org>.

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

9 juillet 2008