errno(3) Library Functions Manual errno(3) NOM errno - Code de la derniere erreur BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include DESCRIPTION Le fichier d'en-tete definit la variable de type entier errno qui est renseignee par les appels systeme et quelques fonctions de bibliotheque pour decrire 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 systeme indique une erreur (c'est-a-dire -1 pour la plupart des appels systeme ; -1 ou NULL pour la plupart des fonctions de bibliotheque) ; une fonction qui reussit est autorisee a modifier errno. La valeur de errno n'est jamais mis a zero par un appel systeme ou une fonction de bibliotheque. Pour certains appels systeme et fonctions de bibliotheque (par exemple getpriority(2)), -1 est une valeur de retour correcte en cas de reussite. Dans de tels cas, une valeur de retour en cas de reussite peut etre distinguee d'un cas d'erreur en positionnant errno a zero avant l'appel, puis, quand l'appel renvoie une valeur qui indique qu'une erreur a pu se produire, en verifiant si errno a une valeur non nulle. errno est definie par la norme ISO C comme une << lvalue >> modifiable de type int et n'a pas besoin d'etre definie explicitement ; errno peut etre une macro. errno est locale a un thread ; lui affecter une valeur dans un thread ne modifie pas sa valeur dans les autres threads. Numeros d'erreur et noms Les numeros d'erreur valables sont tous des nombres positifs. Le fichier d'en-tete definit les noms symboliques pour chacun des numeros d'erreur possibles pouvant apparaitre dans errno. Toutes les erreurs detaillees dans POSIX.1 doivent avoir des valeurs differentes a l'exception de EAGAIN et EWOULDBLOCK qui peuvent avoir la meme valeur. Sur Linux, ces deux erreurs ont la meme valeur sur toutes les architectures. Les numeros d'erreur qui correspondent a chaque nom symbolique varient selon les systemes UNIX et c'est meme le cas sous Linux pour des architectures differentes. Par consequent, les valeurs numeriques ne sont pas indiquees dans la liste des noms d'erreur ci-dessous. Les fonctions perror(3) et strerror(3) peuvent etre utilisees pour convertir ces noms en leur message d'erreur textuel correspondant. Il est possible, sur n'importe quel systeme Linux, d'obtenir la liste de tous les noms d'erreurs symboliques et leurs numeros d'erreur correspondant en utilisant la commande errno(1) (faisant partie du paquet moreutils) : $ errno -l EPERM 1 Operation interdite ENOENT 2 Fichier ou repertoire inexistant ESRCH 3 Processus inexistant EINTR 4 Appel systeme interrompu EIO 5 Erreur d'entree/sortie ... La commande errno(1) peut egalement etre utilisee pour rechercher des numeros et noms d'erreurs specifiques, ainsi que chercher des erreurs en utilisant les chaines de description de l'erreur, comme dans l'exemple suivant : $ errno 2 ENOENT 2 Fichier ou repertoire inexistant $ errno ESRCH ESRCH 3 Processus inexistant $ errno -s permission EACCES 13 Permission refusee Liste des noms d'erreur Dans la liste des noms d'erreurs symboliques ci-dessous, plusieurs noms sont marques comme suit : POSIX.1-2001 Le nom est defini par POSIX.1-2001 et est defini dans les versions ulterieures de POSIX.1 a moins qu'il ne soit indique autre chose. POSIX.1-2008 Le nom est defini dans POSIX.1-2008 mais n'est pas present dans les normes POSIX.1 anterieures. C99 Le nom est definit par C99. Ci-dessous se trouve une liste des noms d'erreurs symboliques qui sont definies sous Linux : E2BIG Liste d'arguments trop longue (POSIX.1-2001). EACCES Permission refusee (POSIX.1-2001) EADDRINUSE Adresse deja 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 etre la meme valeur que EWOULDBLOCK) (POSIX.1-2001) EALREADY Connexion deja en cours (POSIX.1-2001). EBADE Echange non valable. EBADF Mauvais descripteur de fichier (POSIX.1-2001). EBADFD Descripteur de fichier dans un mauvais etat. EBADMSG Mauvais message (POSIX.1-2001). EBADR Descripteur de requete non valable. EBADRQC Code de requete non valable. EBADSLT Emplacement (<< Slot >>) non valable. EBUSY Peripherique ou ressource indisponible (POSIX.1-2001). ECANCELED Operation annulee (POSIX.1-2001). ECHILD Pas de processus enfant (POSIX.1-2001). ECHRNG Numero de canal hors intervalle. ECOMM Echec de la communication lors de l'envoi. ECONNABORTED Connexion abandonnee (POSIX.1-2001). ECONNREFUSED Connexion refusee (POSIX.1-2001). ECONNRESET Connexion reinitialisee (POSIX.1-2001). EDEADLK Blocage d'une ressource evite (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 necessaire (POSIX.1-2001). EDOM Argument mathematique hors du domaine de definition de la fonction (POSIX.1, C99). EDQUOT Quota du disque depasse (POSIX.1-2001). EEXIST Fichier existant (POSIX.1-2001). EFAULT Mauvaise adresse (POSIX.1-2001). EFBIG Fichier trop grand (POSIX.1-2001). EHOSTDOWN Hote eteint. EHOSTUNREACH Hote non accessible (POSIX.1-2001). EHWPOISON Une page memoire a une erreur materielle. EIDRM Identificateur supprime (POSIX.1-2001). EILSEQ Multi-octet ou caractere large non autorise ou incomplet (POSIX.1, C99). Le texte montre ici correspond a la description des erreurs de la glibc ; cette erreur est decrite dans POSIX.1 comme << Sequence d'octet illegale >>. EINPROGRESS Operation en cours (POSIX.1-2001). EINTR Appel systeme interrompu (POSIX.1-2001) ; consultez signal(7). EINVAL Argument non valable (POSIX.1-2001). EIO Erreur d'entree/sortie (POSIX.1-2001). EISCONN Socket connecte (POSIX.1-2001). EISDIR Est un repertoire (POSIX.1-2001). EISNAM Est un fichier de type nomme. EKEYEXPIRED Cle expiree. EKEYREJECTED La cle a ete rejetee par le service. EKEYREVOKED La cle a ete revoquee. EL2HLT Niveau 2 arrete. EL2NSYNC Niveau 2 non synchronise. EL3HLT Niveau 3 arrete. EL3RST Niveau 3 reinitialise. ELIBACC Impossible d'acceder a une bibliotheque partagee requise. ELIBBAD Acces a une bibliotheque partagee corrompue. ELIBMAX Tentative de liaison avec trop de bibliotheques partagees. ELIBSCN Section .lib dans a.out corrompue ELIBEXEC Impossible d'executer directement une bibliotheque partagee. ELNRNG Numero de lien hors d'intervalle. ELOOP Trop de niveaux de liens symboliques (POSIX.1-2001). EMEDIUMTYPE Mauvais type de media. EMFILE Trop de fichiers ouverts (POSIX.1-2001). Communement causee par un depassement de la limite de ressource RLIMIT_NOFILE decrite dans getrlimit(2). Peut aussi etre causee par un depassement de la limite specifiee 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 reseau est desactive (POSIX.1-2001). ENETRESET Connexion annulee par le reseau (POSIX.1-2001). ENETUNREACH Reseau inaccessible (POSIX.1-2001). ENFILE Trop de fichiers ouverts pour le systeme (POSIX.1-2001). Sur Linux, cela est probablement du au depassement de la limite /proc/sys/fs/file-max (consultez proc(5)). ENOANO Pas de noeud d'index. ENOBUFS Aucun espace de tampon disponible (POSIX.1 (option des FLUX XSI)). ENODATA L'attribut nomme n'existe pas ou le processus n'a pas acces a cet attribut, consultez xattr(7). Dans POSIX.1-2001 (option XSI STREAMS), cette erreur est decrite comme << Aucun message n'est disponible sur la tete de la queue de lecture du FLUX >>. ENODEV Peripherique inexistant (POSIX.1-2001). ENOENT Fichier ou repertoire inexistant (POSIX.1-2001). Typiquement, cette erreur survient lors qu'un nom de chemin indique n'existe pas, ou que l'un des composants dans le prefixe de repertoire d'un nom de chemin n'existe pas, ou que le nom de chemin indique est un lien symbolique sans cible. ENOEXEC Erreur de format d'execution (POSIX.1-2001). ENOKEY Cle necessaire non disponible. ENOLCK Pas de verrou disponible (POSIX.1-2001). ENOLINK Un lien a ete disjoint (POSIX.1-2001). ENOMEDIUM Aucun media trouve. ENOMEM Pas assez de memoire, impossible d'allouer de la memoire (POSIX.1-2001). ENOMSG Pas de message du type attendu (POSIX.1-2001). ENONET La machine n'est pas sur le reseau. ENOPKG Paquet non installe. ENOPROTOOPT Protocole indisponible (POSIX.1-2001). ENOSPC Plus de place sur le peripherique (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 implementee (POSIX.1-2001). ENOTBLK Peripherique bloc necessaire. ENOTCONN Le socket n'est pas connecte (POSIX.1-2001). ENOTDIR Pas un repertoire (POSIX.1-2001). ENOTEMPTY Repertoire non vide (POSIX.1-2001). ENOTRECOVERABLE Etat non recuperable (POSIX.1-2008). ENOTSOCK Pas un socket (POSIX.1-2001). ENOTSUP Operation non prise en charge (POSIX.1-2001). ENOTTY Operation de controle d'entree/sortie inadequate (POSIX.1-2001). ENOTUNIQ Le nom sur le reseau n'est pas unique. ENXIO Peripherique ou adresse inexistant (POSIX.1-2001). EOPNOTSUPP Operation non prise en charge par le socket (POSIX.1-2001). (ENOTSUP et EOPNOTSUPP ont la meme valeur sous Linux, mais selon POSIX.1, ces codes d'erreurs devraient etre differents). EOVERFLOW Valeur trop grande pour etre stockee dans ce type de donnee (POSIX.1-2001). EOWNERDEAD Proprietaire disparu (POSIX.1-2008). EPERM Operation interdite (POSIX.1-2001). EPFNOSUPPORT Famille de protocoles non prise en charge. EPIPE Tube casse (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 Resultat trop grand (POSIX.1, C99). EREMCHG Adresse distante changee. EREMOTE L'objet est distant. EREMOTEIO Erreur d'entrees-sorties distante. ERESTART L'appel systeme interrompu devrait etre relance. ERFKILL Operation impossible a cause de RF-kill. EROFS Systeme de fichiers en lecture seule (POSIX.1-2001). ESHUTDOWN Impossible d'effectuer l'envoi apres l'arret 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 perimee (POSIX.1-2001). Cette erreur peut se produire avec le systeme de fichiers NFS et d'autres. ESTRPIPE Tube de flux casse. ETIME Delai expire (POSIX.1 (option des FLUX XSI)). (POSIX.1 stipule << delai du FLUX ioctl(2) depasse.) ETIMEDOUT Delai maximal de connexion ecoule (POSIX.1-2001). ETOOMANYREFS Trop de references : impossible de copier (splice). ETXTBSY Fichier texte occupe (POSIX.1-2001). EUCLEAN La structure necessite un nettoyage. EUNATCH Pilote du protocole non attache. EUSERS Trop d'utilisateurs. EWOULDBLOCK L'operation serait bloquante (peut etre la meme valeur que EAGAIN) (POSIX.1-2001). EXDEV Lien entre preripheriques non valalable (POSIX.1-2001). EXFULL Echange plein. NOTES Une erreur frequente est de faire if (somecall() == -1) { printf("somecall() failed\n"); if (errno == ...) { ... } } ou errno n'a plus besoin de la valeur qu'elle avait juste apres le retour de somecall() (par exemple, elle peut etre changee par printf(3)). Si la valeur de errno doit etre preservee a travers un appel bibliotheque, elle doit etre sauvegardee : if (somecall() == -1) { int errsv = errno; printf("somecall() failed\n"); if (errsv == ...) { ... } } Notez que les API de fil d'execution POSIX ne positionnent pas errno en cas d'erreur mais elles renvoient pour resultat le numero de l'erreur. Ces numeros d'erreur ont la meme signification que les numeros d'erreur indiques dans errno par d'autres API. Sur d'anciens systemes, n'est pas present ou ne declare pas errno si bien qu'il est necessaire de declarer errno manuellement (avec extern int errno). Ne faites pas cela. Cela a cesse d'etre le cas il y a bien longtemps et cause des problemes avec les versions modernes de la bibliotheque C. VOIR AUSSI errno(1), err(3), error(3), perror(3), strerror(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 errno(3)