Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Fichiers d'entêtes de la bibliothèque
Référence de fonctions
Les premiers pas
Les rapports d'erreurs
Allocation et pagination de la mémoire virtuelle
Préface
Notes légales
Dictionnaire
Recherche

Les rapports d'erreurs

De nombreuses fonctions de la bibliothèque glibc détectent et signalent les conditions d'erreur, et vos programmes doivent parfois vérifier ces conditions d'erreur. Par exemple, lorsque vous ouvrez un fichier d'entrée, vous devez vérifier que le fichier a été ouvert correctement et afficher un message d'erreur ou prendre toute autre mesure appropriée si l'appel à la fonction de la bibliothèque a échoué.

Cette page décrit le fonctionnement de la fonction de rapport d'erreur. Votre programme doit inclure le fichier d'entête errno.h pour utiliser cette fonction :

Vérification des erreurs

La plupart des fonctions de bibliothèque renvoient une valeur spéciale pour indiquer qu'elles ont échoué. La valeur spéciale est généralement -1, un pointeur null ou une constante telle que EOF définie à cet effet. Mais cette valeur de retour vous indique uniquement qu'une erreur s'est produite. Pour savoir de quel type d'erreur il s'agit, vous devez consulter le code d'erreur entreposé dans la variable errno. Cette variable est déclarée dans le fichier d'entête errno.h.

Variable :

volatile int errno

Tous les codes d'erreur ont des noms symboliques ; ce sont des macros définies dans errno.h. Les noms commencent par «E» suivi d'une lettre majuscule ou d'un chiffre; vous devez considérer les noms de cette forme comme des noms réservés.

Les valeurs des codes d'erreur sont toutes des entiers positifs et sont toutes distinctes, à une exception près : EWOULDBLOCK et EAGAIN sont identiques. Étant donné que les valeurs sont distinctes, vous pouvez les utiliser comme étiquettes dans une instruction switch ; n'utilisez simplement pas à la fois EWOULDBLOCK et EAGAIN. Votre programme ne doit pas faire d'autres suppositions sur les valeurs spécifiques de ces constantes symboliques.

La valeur de errno ne doit pas nécessairement correspondre à l'une de ces macros, car certaines fonctions de bibliothèque peuvent renvoyer d'autres codes d'erreur pour d'autres situations. Les seules valeurs dont la signification est garantie pour une fonction de bibliothèque particulière sont celles que cette page répertorie pour cette fonction.

À l'exception des systèmes GNU/Hurd, presque tous les appels système peuvent renvoyer EFAULT s'ils reçoivent un pointeur non valide comme paramètre. Comme cela ne peut se produire qu'à la suite d'un bogue dans votre programme, et comme cela n'arrivera pas sur les systèmes GNU/Hurd, nous avons économisé de l'espace en ne mentionnant pas EFAULT dans les descriptions des fonctions individuelles.

Dans certains systèmes Unix, de nombreux appels système peuvent également renvoyer EFAULT si un pointeur vers la pile est donné en paramètre, et le noyau, pour une raison obscure, échoue dans sa tentative d'étendre la pile. Si cela se produit un jour, vous devriez probablement essayer d'utiliser de la mémoire allouée de manière statique ou dynamique au lieu de la mémoire de pile sur ce système.

Codes d'erreur

Les macros de codes d'erreur sont définies dans le fichier d'entête errno.h. Elles se développent toutes en valeurs constantes entières. Certains de ces codes d'erreur ne peuvent pas se produire sur les systèmes GNU, mais ils peuvent se produire en utilisant la bibliothèque glibc sur d'autres systèmes.

Macro :

int EPERM

"Operation not permitted." Opération non autorisée : Seul le propriétaire du fichier (ou autre ressource) ou les processus disposant de privilèges spéciaux peuvent effectuer l'opération.

Macro :

int ENOENT

"No such file or directory." Il s'agit d'une erreur «le fichier n'existe pas» pour les fichiers ordinaires étant référencés dans des contextes où ils sont censés déjà exister.

Macro :

int ESRCH

"No such process." Aucun processus ne correspond à l'ID de processus spécifié.

Macro :

int EINTR

"Interrupted system call." Un signal désynchronisée s'est produit et a empêché l'exécution de l'appel. Lorsque cela se produit, vous devez réessayer l'appel. Vous pouvez choisir de faire en sorte que les fonctions reprennent après un signal traité, plutôt que d'échouer avec EINTR.

Macro :

int EIO

"Input/output error." Généralement utilisé pour les erreurs de lecture ou d'écriture physiques.

Macro :

int ENXIO

"No such device or address." Le système a essayé d'utiliser le périphérique représenté par un fichier que vous avez spécifié et n'a pas pu le trouver. Cela peut signifier que le fichier du périphérique a été installé de manière incorrecte ou que le périphérique physique est manquant ou n'est pas correctement connecté à l'ordinateur.

Macro :

int E2BIG

"Argument list too long." Utilisé lorsque les paramètres passés à un nouveau programme exécuté avec l'une des fonctions exec occupent trop d'espace mémoire. Cette condition ne se produit jamais sur les systèmes GNU/Hurd.

Macro :

int ENOEXEC

"Exec format error." Format de fichier exécutable non valide. Cette condition est détectée par les fonctions exec.

Macro :

int EBADF

"Bad file descriptor." Par exemple, une entrée/sortie sur un descripteur ayant été fermé ou une lecture depuis un descripteur ouvert uniquement en écriture (ou vice versa).

Macro :

int ECHILD

"No child processes." Cette erreur se produit sur les opérations étant censées manipuler des processus enfants, alors qu'il n'y a aucun processus à manipuler.

Macro :

int EDEADLK

"Resource deadlock avoided." L'allocation d'une ressource système aurait pu entraîner une situation de blocage. Le système ne garantit pas qu'il détectera toutes ces situations. Cette erreur signifie que vous avez eu de la chance et que le système l'a remarqué ; il pourrait simplement se bloquer.

Macro :

int ENOMEM

"Cannot allocate memory." Le système ne peut pas allouer plus de mémoire virtuelle car sa capacité est pleine.

Macro :

int EACCES

"Permission denied." Les autorisations du fichier ne permettent pas l'opération tentée.

Macro :

int EFAULT

"Bad address." Un pointeur non valide a été détecté. Sur les systèmes GNU/Hurd, cette erreur ne se produit jamais; vous obtenez un signal à la place.

Macro :

int ENOTBLK

"Block device required." Un fichier n'étant pas un fichier spécial de type bloc a été fourni dans une situation en nécessitant un. Par exemple, essayer de monter un fichier ordinaire en tant que système de fichiers sous Unix génère cette erreur.

Macro :

int EBUSY

"Device or resource busy." Une ressource système ne pouvant pas être partagée est déjà utilisée. Par exemple, si vous essayez de supprimer un fichier étant la racine d'un système de fichiers actuellement monté, vous obtenez cette erreur.

Macro :

int EEXIST

"File exists." Un fichier existant a été spécifié dans un contexte où il était logique de spécifier un nouveau fichier.

Macro :

int EXDEV

"Invalid cross-device link." Une tentative de création d'un lien incorrect entre les systèmes de fichiers a été détectée. Cela se produit non seulement lorsque vous utilisez un lien mais également lorsque vous renommez un fichier avec rename.

Macro :

int ENODEV

"No such device." Le mauvais type d'appareil a été attribué à une fonction attendant un type particulier d'appareil.

Macro :

int ENOTDIR

"Not a directory." Un fichier n'étant pas un répertoire a été spécifié alors qu'un répertoire est requis.

Macro :

int EISDIR

"Is a directory." Vous ne pouvez pas ouvrir un répertoire pour l'écriture, ni créer ou supprimer des liens physiques vers celui-ci.

Macro :

int EINVAL

"Invalid argument." Ceci est utilisé pour indiquer différents types de problèmes liés au passage du mauvais argument à une fonction de bibliothèque.

Macro :

int EMFILE

"Too many open files." Le processus actuel a trop de fichiers ouverts et ne peut plus en ouvrir. Les descripteurs en double comptent dans cette limite. Dans BSD et GNU, le nombre de fichiers ouverts est contrôlé par une limite de ressources qui peut généralement être augmentée. Si vous obtenez cette erreur, vous souhaiterez peut-être augmenter la limite RLIMIT_NOFILE ou la rendre illimitée.

Macro :

int ENFILE

"Too many open files in system." Il y a trop d'ouvertures de fichiers distinctes dans l'ensemble du système. Notez que n'importe quel nombre de canaux liés compte comme une seule ouverture de fichier. Cette erreur ne se produit jamais sur les systèmes GNU/Hurd.

Macro :

int ENOTTY

"Inappropriate ioctl for device." Opération de contrôle d'entrée/sortie inappropriée, comme la tentative de définition des modes de terminal sur un fichier ordinaire.

Macro :

int ETXTBSY

"Text file busy." Tentative d'exécution d'un fichier actuellement ouvert en écriture ou d'écriture dans un fichier en cours d'exécution. L'utilisation d'un débogueur pour exécuter un programme est souvent considérée comme l'ayant ouvert en écriture et provoquera cette erreur. (Le nom signifie «fichier texte occupé».) Ce n'est pas une erreur sur les systèmes GNU/Hurd; le texte est copié si nécessaire.

Macro :

int EFBIG

"File too large." La taille d'un fichier serait plus grande que celle autorisée par le système.

Macro :

int ENOSPC

"No space left on device." L'opération d'écriture sur un fichier a échoué car le disque est plein.

Macro :

int ESPIPE

"Illegal seek." Opération de recherche non valide (comme sur un tuyau).

Macro :

int EROFS

"Read-only file system." Une tentative a été effectuée pour modifier quelque chose sur un système de fichiers en lecture seulement.

Macro :

int EMLINK

"Too many links." Le nombre de liens d'un seul fichier deviendrait trop important. rename peut provoquer cette erreur si le fichier renommé possède déjà autant de liens qu'il peut en contenir.

Macro :

int EPIPE

"Broken pipe." Il n'y a aucun processus de lecture à l'autre extrémité d'un tube. Chaque fonction de bibliothèque renvoyant ce code d'erreur génère également un signal SIGPIPE ; ce signal met fin au programme s'il n'est pas traité ou bloqué. Ainsi, votre programme ne verra jamais EPIPE à moins qu'il n'ait traité ou bloqué SIGPIPE.

Macro :

int EDOM

"Numerical argument out of domain." Utilisé par les fonctions mathématiques lorsqu'une valeur de paramètre n'entre pas dans le domaine sur lequel la fonction est définie.

Macro :

int ERANGE

"Numerical result out of range." Utilisé par les fonctions mathématiques lorsque la valeur du résultat n'est pas représentable en raison d'un dépassement ou d'un sous-dépassement.

Macro :

int EAGAIN

"Resource temporarily unavailable." L'appel peut fonctionner si vous réessayez plus tard. La macro EWOULDBLOCK est un autre nom pour EAGAIN ; ils sont toujours les mêmes dans la bibliothèque glibc.

Cette erreur peut se produire dans plusieurs situations différentes :

Une opération bloquant a été tentée sur un objet dont le mode non bloquant est sélectionné. Essayer à nouveau la même opération bloquera jusqu'à ce qu'une condition externe permette de lire, d'écrire ou de se connecter (quelle que soit l'opération). Vous pouvez utiliser select pour savoir quand l'opération sera possible.

Note sur la portabilité : dans de nombreux anciens systèmes Unix, cette condition était indiquée par EWOULDBLOCK, étant un code d'erreur distinct de EAGAIN. Pour rendre votre programme portable, vous devez vérifier les deux codes et les traiter de la même manière. Une pénurie temporaire de ressources a rendu une opération impossible. fork peut renvoyer cette erreur. Elle indique que la pénurie devrait passer, de sorte que votre programme peut réessayer l'appel plus tard et qu'il peut réussir. Il est probablement judicieux d'attendre quelques secondes avant de réessayer, afin de laisser le temps aux autres processus de libérer des ressources rares. De telles pénuries sont généralement assez graves et affectent l'ensemble du système, c'est pourquoi un programme interactif doit généralement signaler l'erreur à l'utilisateur et retourner à sa boucle de commande.

Macro :

int EWOULDBLOCK

"Operation would block." Dans la bibliothèque glibc, il s'agit d'un autre nom pour EAGAIN (ci-dessus). Les valeurs sont toujours les mêmes, sur tous les systèmes d'exploitation.

Les bibliothèques C de nombreux anciens systèmes Unix ont EWOULDBLOCK comme code d'erreur distinct.

Macro :

int EINPROGRESS

"Operation now in progress." Une opération ne pouvant pas se terminer immédiatement a été initiée sur un objet dont le mode non bloquant est sélectionné. Certaines fonctions devant toujours bloquer (comme connect) ne renvoient jamais EAGAIN. Au lieu de cela, elles renvoient EINPROGRESS pour indiquer que l'opération a commencé et prendra un certain temps. Les tentatives de manipulation de l'objet avant la fin de l'appel renvoient EALREADY. Vous pouvez utiliser la fonction select pour savoir quand l'opération en attente est terminée.

Macro :

int EALREADY

"Operation already in progress." Une opération est déjà en cours sur un objet dont le mode non bloquant est sélectionné.

Macro :

int ENOTSOCK

"Socket operation on non-socket." Un fichier n'étant pas un socket a été spécifié alors qu'un socket est requis.

Macro :

int EMSGSIZE

"Message too long." La taille d'un message envoyé sur un socket était supérieure à la taille maximale prise en charge.

Macro :

int EPROTOTYPE

"Protocol wrong type for socket." Le type de socket ne prend pas en charge le protocole de communication demandé.

Macro :

int ENOPROTOOPT

"Protocol not available." Vous avez spécifié une option de socket n'ayant aucun sens pour le protocole particulier utilisé par le socket.

Macro :

int EPROTONOSUPPORT

"Protocol not supported." Le domaine de socket ne prend pas en charge le protocole de communication demandé (peut-être parce que le protocole demandé est complètement invalide).

Macro :

int ESOCKTNOSUPPORT

"Socket type not supported." Le type de socket n'est pas pris en charge.

Macro :

int EOPNOTSUPP

"Operation not supported." L'opération que vous avez demandée n'est pas prise en charge. Certaines fonctions de socket n'ont pas de sens pour tous les types de sockets, et d'autres peuvent ne pas être implémentées pour tous les protocoles de communication. Sur les systèmes GNU/Hurd, cette erreur peut se produire pour de nombreux appels lorsque l'objet ne prend pas en charge l'opération particulière ; c'est une indication générique que le serveur ne sait rien faire pour cet appel.

Macro :

int EPFNOSUPPORT

"Protocol family not supported." La famille de protocoles de communication de socket que vous avez demandée n'est pas prise en charge.

Macro :

int EAFNOSUPPORT

"Address family not supported by protocol." La famille d'adresses spécifiée pour un socket n'est pas prise en charge; elle est incompatible avec le protocole utilisé sur le socket.

Macro :

int EADDRINUSE

"Address already in use." L'adresse de socket demandée est déjà utilisée.

Macro :

int EADDRNOTAVAIL

"Cannot assign requested address." L'adresse de socket demandée n'est pas disponible. Par exemple, vous avez essayé de donner à un socket un nom ne correspondant pas au nom de l'hôte local.

Macro :

int ENETDOWN

"Network is down." Une opération de socket a échoué car le réseau était en panne.

Macro :

int ENETUNREACH

"Network is unreachable." Une opération de socket a échoué car le sous-réseau contenant l'hôte distant était inaccessible.

Macro :

int ENETRESET

"Network dropped connection on reset." Une connexion réseau a été réinitialisée car l'hôte distant est tombé en panne.

Macro :

int ECONNABORTED

"Software caused connection abort." Une connexion réseau a été interrompue localement.

Macro :

int ECONNRESET

"Connection reset by peer." Une connexion réseau a été fermée pour des raisons indépendantes de la volonté de l'hôte local, par exemple en raison du redémarrage de la machine distante ou d'une violation de protocole irrécupérable.

Macro :

int ENOBUFS

"No buffer space available." Les tampons du noyau pour les opérations d'entrée/sortie sont tous utilisés. Dans GNU, cette erreur est toujours synonyme d'ENOMEM ; vous pouvez obtenir l'une ou l'autre à partir d'opérations réseau.

Macro :

int EISCONN

"Transport endpoint is already connected." Vous avez essayé de connecter une prise déjà connectée.

Macro :

int ENOTCONN

"Transport endpoint is not connected." Le socket n'est connecté à rien. Vous obtenez cette erreur lorsque vous essayez de transmettre des données via un socket, sans spécifier au préalable une destination pour les données. Pour un socket sans connexion (pour les protocoles de datagramme, tels que UDP), vous obtenez EDESTADDRREQ à la place.

Macro :

int EDESTADDRREQ

"Destination address required." Aucune adresse de destination par défaut n'a été définie pour le socket. Vous obtenez cette erreur lorsque vous essayez de transmettre des données via un socket sans connexion, sans avoir au préalable spécifié une destination pour les données avec connect.

Macro :

int ESHUTDOWN

"Cannot send after transport endpoint shutdown." Le socket a déjà été fermée.

Macro :

int ETOOMANYREFS

"Too many references: cannot splice." Trop de références : impossible de les raccorder.

Macro :

int ETIMEDOUT

"Connection timed out." Une opération de socket avec un délai d'expiration spécifié n'a reçu aucune réponse pendant la période de délai d'expiration.

Macro :

int ECONNREFUSED

"Connection refused." Un hôte à distance a refusé d'autoriser la connexion réseau (généralement parce qu'il n'exécute pas le service demandé).

Macro :

int ELOOP

"Too many levels of symbolic links." Trop de niveaux de liens symboliques ont été rencontrés lors de la recherche d'un nom de fichier. Cela indique souvent un cycle de liens symboliques.

Macro :

int ENAMETOOLONG

"File name too long." Nom de fichier trop long (plus long que PATH_MAX ) ou nom d'hôte trop long (dans gethostname ou sethostname).

Macro :

int EHOSTDOWN

"Host is down." L'hôte à distance pour une connexion réseau demandée est en panne.

Macro :

int EHOSTUNREACH

"No route to host." L'hôte distant pour une connexion réseau demandée n'est pas accessible.

Macro :

int ENOTEMPTY

"Directory not empty." Le répertoire n'est pas vide, alors qu'un répertoire vide était attendu. Généralement, cette erreur se produit lorsque vous essayez de supprimer un répertoire.

Macro :

int EPROCLIM

"Too many processes." Cela signifie que la limite par utilisateur pour un nouveau processus serait dépassée par une tentative de fork.

Macro :

int EUSERS

"Too many users." Le système de quotas de fichiers est confus car il y a trop d'utilisateurs.

Macro :

int EDQUOT

"Disk quota exceeded." Le quota de disque de l'utilisateur a été dépassé.

Macro :

int ESTALE

"Stale file handle." Cela indique une confusion interne dans le système de fichiers due à des réorganisations du système de fichiers sur l'hôte du serveur pour les systèmes de fichiers NFS ou à une corruption dans d'autres systèmes de fichiers. La réparation de cette condition nécessite généralement le démontage, éventuellement la réparation et le remontage du système de fichiers.

Macro :

int EREMOTE

"Object is remote." Une tentative de montage NFS d'un système de fichiers distant avec un nom de fichier spécifiant déjà un fichier monté NFS a été effectuée. (Il s'agit d'une erreur sur certains systèmes d'exploitation, mais nous nous attendons à ce qu'elle fonctionne correctement sur les systèmes GNU/Hurd, ce qui rend ce code d'erreur impossible.)

Macro :

int EBADRPC

"RPC struct is bad." La structure RPC est mauvaise.

Macro :

int ERPCMISMATCH

"RPC version wrong." Version RPC incorrecte.

Macro :

int EPROGUNAVAIL

"RPC program not available." Le programme RPC non disponible.

Macro :

int EPROGMISMATCH

"RPC program version wrong." Version du programme RPC incorrecte.

Macro :

int EPROCUNAVAIL

"RPC bad procedure for program." Mauvaise procédure RPC pour le programme.

Macro :

int ENOLCK

"No locks available." Cette erreur est utilisée par les fonctions de verrouillage de fichiers. Cette erreur n'est jamais générée par les systèmes GNU/Hurd, mais elle peut résulter d'une opération sur un serveur NFS exécutant un autre système d'exploitation.

Macro :

int EFTYPE

"Inappropriate file type or format." Le type de fichier n'était pas correct pour l'opération ou un fichier de données avait un format incorrect. Sur certains systèmes, chmod renvoie cette erreur si vous essayez de définir le bit sticky sur un fichier non-répertoire.

Macro :

int EAUTH

"Authentication error." Erreur d'authentification.

Macro :

int ENEEDAUTH

"Need authenticator." Besoin d'un authentificateur.

Macro :

int ENOSYS

"Function not implemented." Cela indique que la fonction appelée n'est pas implémentée du tout, ni dans la bibliothèque C elle-même, ni dans le système d'exploitation. Lorsque vous obtenez cette erreur, vous pouvez être sûr que cette fonction particulière échouera toujours avec ENOSYS, à moins que vous n'installiez une nouvelle version de la bibliothèque C ou du système d'exploitation.

Macro :

int ELIBEXEC

"Cannot exec a shared library directly." Impossible d'exécuter directement une bibliothèque partagée.

Macro :

int ENOTSUP

"Not supported." Une fonction renvoie cette erreur lorsque certaines valeurs de paramètres sont valides, mais que la fonctionnalité qu'elles demandent n'est pas disponible. Cela peut signifier que la fonction n'implémente pas du tout une valeur de commande ou d'option particulière ou un bit d'indicateur. Pour les fonctions opérant sur un objet donné dans un paramètre, tel qu'un descripteur de fichier ou un port, cela peut plutôt signifier que seul cet objet spécifique (descripteur de fichier, port,...) n'est pas en mesure de prendre en charge les autres paramètres donnés ; différents descripteurs de fichiers peuvent prendre en charge différentes intervalles de valeurs de paramètres.

Si la fonction entière n'est pas du tout disponible dans l'implémentation, elle renvoie ENOSYS à la place.

Macro :

int EILSEQ

"Invalid or incomplete multibyte or wide character." Lors du décodage d'un caractère multi-octets, la fonction a détecté une séquence d'octets non valide ou incomplète ou le caractère large donné n'est pas valide.

Macro :

int EBACKGROUND

"Inappropriate operation for background process." Sur les systèmes GNU/Hurd, les serveurs prenant en charge le protocole term renvoient cette erreur pour certaines opérations lorsque l'appelant ne se trouve pas dans le groupe de processus au premier plan du terminal. Les utilisateurs ne voient généralement pas cette erreur car des fonctions telles que read et write la traduisent en un signal SIGTTIN ou SIGTTOU.

Macro :

int EDIED

"Translator died." Sur les systèmes GNU/Hurd, l'ouverture d'un fichier renvoie cette erreur lorsque le fichier est traduit par un programme et que le programme de traduction s'arrête au démarrage, avant de se connecter au fichier.

Macro :

int ED

"?." L'utilisateur expérimenté saura ce qui ne va pas.

Macro :

int EGREGIOUS

"You really blew it this time." Cette erreur permet est flagrante, extrême, ou inacceptable.

Macro :

int EIEIO

"Computer bought the farm." Cette erreur permet d'indiquer une erreur de contexte.

Macro :

int EGRATUITOUS

"Gratuitous error." Ce code d'erreur n'a aucune utilité.

Macro :

int EBADMSG

"Bad message." Mauvais message.

Macro :

int EIDRM

"Identifier removed." Identifiant supprimé.

Macro :

int EMULTIHOP

"Multihop attempted." Tentative de saut multiple.

Macro :

int ENODATA

"No data available." Aucune donnée disponible.

Macro :

int ENOLINK

"Link has been severed." Le lien a été rompu.

Macro :

int ENOMSG

"No message of desired type." Aucun message du type souhaité.

Macro :

int ENOSR

"Out of streams resources." Ressources hors flux.

Macro :

int ENOSTR

"Device not a stream." Le périphérique n'est pas un flux.

Macro :

int EOVERFLOW

"Value too large for defined data type." Valeur trop grande pour le type de données défini.

Macro :

int EPROTO

"Protocol error." Erreur de protocole.

Macro :

int ETIME

"Timer expired." Le temps imparti a expiré.

Macro :

int ECANCELED

"Operation canceled." Une opération désynchronisée a été annulée avant d'être terminée. Voir Exécuter des opérations d'entrée/sortie en parallèle. Lorsque vous appelez aio_cancel, le résultat normal est que les opérations affectées se terminent avec cette erreur.

Macro :

int EOWNERDEAD

"Owner died." Le propriétaire est décédé.

Macro :

int ENOTRECOVERABLE

"State not recoverable." Les codes d'erreur suivants sont définis par le noyau Linux/i386.

Macro :

int ERESTART

"Interrupted system call should be restarted." L'appel système interrompu doit être redémarré.

Macro :

int ECHRNG

"Channel number out of range." Numéro de canal hors de portée.

Macro :

int EL2NSYNC

"Level 2 not synchronized." Niveau 2 non synchronisé.

Macro :

int EL3HLT

"Level 3 halted." Niveau 3 arrêté.

Macro :

int EL3RST

"Level 3 reset." Réinitialisation de niveau 3.

Macro :

int ELNRNG

"Link number out of range." Numéro de lien hors intervalle.

Macro :

int EUNATCH

"Protocol driver not attached." Pilote de protocole non connecté.

Macro :

int ENOCSI

"No CSI structure available." Aucune structure CSI disponible.

Macro :

int EL2HLT

"Level 2 halted." Niveau 2 arrêté.

Macro :

int EBADE

"Invalid exchange." Échange invalide.

Macro :

int EBADR

"Invalid request descriptor." Descripteur de demande non valide.

Macro :

int EXFULL

"Exchange full." Échange complet.

Macro :

int ENOANO

"No anode." Pas d'anode.

Macro :

int EBADRQC

"Invalid request code." Code de demande non valide.

Macro :

int EBADSLT

"Invalid slot." Emplacement non valide.

Macro :

int EDEADLOCK

"File locking deadlock error." Erreur de blocage du verrouillage du fichier.

Macro :

int EBFONT

"Bad font file format." Mauvais format de fichier de police de caractères.

Macro :

int ENONET

"Machine is not on the network." La machine n'est pas sur le réseau.

Macro :

int ENOPKG

"Package not installed." Paquet non installé.

Macro :

int EADV

"Advertise error." Erreur de publicité.

Macro :

int ESRMNT

"Srmount error." Erreur de montage.

Macro :

int ECOMM

"Communication error on send." Erreur de communication lors de l'envoi.

Macro :

int EDOTDOT

"RFS specific error." Erreur spécifique RFS.

Macro :

int ENOTUNIQ

"Name not unique on network." Le nom n'est pas unique sur le réseau.

Macro :

int EBADFD

"File descriptor in bad state." Descripteur de fichier en mauvais état.

Macro :

int EREMCHG

"Remote address changed." Adresse à distance modifiée.

Macro :

int ELIBACC

"Can not access a needed shared library." Impossible d'accéder à une bibliothèque partagée nécessaire.

Macro :

int ELIBBAD

"Accessing a corrupted shared library." Accès à une bibliothèque partagée corrompue.

Macro :

int ELIBSCN

".lib section in a.out corrupted." La section .lib dans a.out est corrompue.

Macro :

int ELIBMAX

"Attempting to link in too many shared libraries." Tentative de liaison dans trop de bibliothèques partagées.

Macro :

int ESTRPIPE

"Streams pipe error." Erreur de tuyau de flux.

Macro :

int EUCLEAN

"Structure needs cleaning." La structure a besoin d'être nettoyée.

Macro :

int ENOTNAM

"Not a XENIX named type file." Il ne s'agit pas d'un fichier de type nommé 1.

Macro :

int ENAVAIL

"No XENIX semaphores available." Aucun sémaphore XENIX disponible.

Macro :

int EISNAM

"Is a named type file." Il s'agit d'un fichier de type nommé.

Macro :

int EREMOTEIO

"Remote I/O error." Erreur d'entrée/sortie à distance.

Macro :

int ENOMEDIUM

"No medium found." Aucun support trouvé.

Macro :

int EMEDIUMTYPE

"Wrong medium type." Type de support incorrect.

Macro :

int ENOKEY

"Required key not available." Clef requise non disponible.

Macro :

int EKEYEXPIRED

"Key has expired." La clef a expiré.

Macro :

int EKEYREVOKED

"Key has been revoked." La clef a été révoquée.

Macro :

int EKEYREJECTED

"Key was rejected by service." La clef a été rejetée par le service.

Macro :

int ERFKILL

"Operation not possible due to RF-kill." Opération impossible en raison de RF-kill.

Macro :

int EHWPOISON

"Memory page has hardware error." La page mémoire présente une erreur matérielle.

Messages d'erreur

La bibliothèque contient des fonctions et des variables conçues pour faciliter la création de messages d'erreur informatifs au format habituel concernant l'échec d'un appel de bibliothèque. Les fonctions strerror et perror vous donnent le message d'erreur standard pour un code d'erreur donné; la variable program_invocation_short_name vous donne un accès pratique au nom du programme ayant rencontré l'erreur.

Fonction :

char * strerror (int errnum)

Préliminaire : | MT-Safe | AS-Unsafe heap i18n | AC-Unsafe mem

La fonction strerror cartographie le code d'erreur spécifié par le paramètre errnum à une chaîne de caractères de message d'erreur descriptive. La chaîne de caractères est traduite selon les paramètres régionaux actuels. La valeur de retour est un pointeur vers cette chaîne de caractères.

La valeur errnum provient normalement de la variable errno.

Vous ne devez pas modifier la chaîne renvoyée par strerror. De plus, si vous effectuez des appels ultérieurs à strerror ou strerror_l, ou si le processus léger ayant obtenu la chaîne de caractères se termine, le pointeur renvoyé sera invalidé.

Comme il n'existe aucun moyen de restaurer l'état précédent après l'appel de strerror, le code de la bibliothèque ne doit pas appeler cette fonction car elle peut interférer avec l'utilisation de strerror par l'application, invalidant le pointeur de chaîne de caractères avant que l'application n'ait fini de l'utiliser. Au lieu de cela, strerror_r, snprintf avec les spécificateurs «%m» ou «%#m», strerrorname_np ou strerrordesc_np peuvent être utilisés à la place.

La fonction strerror préserve la valeur de errno et ne peut pas échouer.

La fonction strerror est déclarée dans string.h.

Fonction :

char * strerror_l(int errnum, locale_t locale)

Préliminaire : | MT-Safe | AS-Unsafe heap i18n | AC-Unsafe mem

Cette fonction est comme strerror, sauf que la chaîne renvoyée est traduite selon les paramètres régionaux (au lieu des paramètres régionaux actuels utilisés par strerror). Notez que l'appel de strerror_l invalide le pointeur renvoyé par strerror et vice versa.

La fonction strerror_l est définie par POSIX et est déclarée dans string.h.

Fonction :

char * strerror_r (int errnum, char *buf, size_t n)

Préliminaire : | MT-Safe | AS-Unsafe i18n | AC-Unsafe

La description suivante concerne la variante GNU de la fonction, utilisée si _GNU_SOURCE est défini.

La fonction strerror_r fonctionne comme strerror mais au lieu de renvoyer un pointeur vers une chaîne de caractères gérée par la bibliothèque glibc, elle peut utiliser le tampon fourni par l'utilisateur commençant par buf pour entreposer la chaîne de caractères.

Au plus n caractères sont écrits (y compris l'octet NUL) dans buf, il appartient donc à l'utilisateur de sélectionner un tampon suffisamment grand. Le fait que le pointeur renvoyé pointe ou non vers le tableau buf dépend de le paramètre errnum. Si la chaîne de caractères de résultat n'est pas entreposée dans buf, la chaîne de caractères ne changera pas pour le reste de l'exécution du programme.

La fonction strerror_r telle que décrite ci-dessus est une extension GNU et elle est déclarée dans string.h. Il existe une variante POSIX de cette fonction, décrite ci-après.

Fonction :

int strerror_r (int errnum, char *buf, size_t n)

Préliminaire : | MT-Safe | AS-Unsafe i18n | AC-Unsafe

Cette variante de la fonction strerror_r est utilisée si une norme est sélectionnée incluant strerror_r, mais que _GNU_SOURCE n'est pas défini. Cette variante POSIX de la fonction écrit toujours le message d'erreur dans le tampon spécifié buf de taille n octets.

En cas de succès, strerror_r renvoie 0. Deux autres valeurs de retour sont utilisées pour indiquer l'échec :

Constante Description
EINVAL Le paramètre errnum ne correspond pas à une constante d'erreur connue.
ERANGE La taille de la mémoire tampon n n'est pas suffisamment grande pour entreposer l'intégralité du message d'erreur.

Même si une erreur est signalée, strerror_r écrit toujours autant de messages d'erreur que possible dans le tampon de sortie. Après un appel à strerror_r, la valeur de errno n'est pas spécifiée.

Si vous souhaitez utiliser la sémantique POSIX de copie permanente de strerror_r dans un programme potentiellement compilé avec _GNU_SOURCE défini, vous pouvez utiliser snprintf avec le spécificateur de conversion «%m», comme ceci :

  1. int saved_errno = errno;
  2. errno = errnum;
  3. int ret = snprintf (buf, n, "%m");
  4. errno = saved_errno;
  5. if (strerrorname_np (errnum) == NULL)
  6.   return EINVAL;
  7. if (ret >= n)
  8.   return ERANGE:
  9. return 0;

Cette fonction est déclarée dans string.h si elle est déclarée. Il s'agit d'une extension POSIX.

Fonction :

void perror (const char *message)

Préliminaire : | MT-Safe race:stderr | AS-Unsafe corrupt i18n heap lock | AC-Unsafe corrupt lock mem fd.

Cette fonction affiche un message d'erreur sur le flux stderr. L'orientation de stderr n'est pas modifiée.

Si vous appelez perror avec un message étant soit un pointeur nul, soit une chaîne de caractères vide, perror affiche simplement le message d'erreur correspondant à errno, en ajoutant une nouvelle ligne de fin.

Si vous fournissez un paramètre de message non nul, perror préfixe sa sortie avec cette chaîne de caractères. Il ajoute un deux-points et un espace pour séparer le message de la chaîne d'erreur correspondant à errno.

La fonction perror est déclarée dans stdio.h.

Fonction :

const char * strerrorname_np (int errnum)

Préliminaire : | MT-Safe | AS-Safe | AC-Safe

Cette fonction renvoie le nom décrivant l'erreur errnum ou NULL s'il n'existe aucune constante connue avec cette valeur (par exemple "EINVAL" pour EINVAL). La chaîne renvoyée ne change pas pour le reste de l'exécution du programme.

Cette fonction est une extension GNU, déclarée dans le fichier d'entête string.h.

Fonction :

const char * strerrordesc_np (int errnum)

Préliminaire : | MT-Safe | AS-Safe | AC-Safe

Cette fonction renvoie le message décrivant l'erreur errnum ou NULL s'il n'existe aucune constante connue avec cette valeur (par exemple, "Invalid argument" pour EINVAL). Contrairement à strerror, la description renvoyée n'est pas traduite et la chaîne renvoyée ne change pas pour le reste de l'exécution du programme.

Cette fonction est une extension GNU, déclarée dans le fichier d'entête string.h.

strerror et perror produisent exactement le même message pour tout code d'erreur donné sous la même langue; le texte précis varie d'un système à l'autre. Avec la bibliothèque glibc, les messages sont assez courts ; il n'y a pas de messages multilignes ni de nouvelles lignes intégrées. Chaque message d'erreur commence par une majuscule et n'inclut aucune ponctuation de fin.

De nombreux programmes ne lisant pas les entrées du terminal sont conçus pour se fermer si un appel système échoue. Par convention, le message d'erreur d'un tel programme doit commencer par le nom du programme, sans les répertoires. Vous pouvez trouver ce nom dans la variable program_invocation_short_name ; le nom complet du fichier est entreposé dans la variable program_invocation_name.

Variable :

char * program_invocation_name

La valeur de cette variable est le nom ayant été utilisé pour appeler le programme exécuté dans le processus en cours. C'est la même chose que argv[0]. Notez que ce n'est pas nécessairement un nom de fichier utile ; il ne contient souvent aucun nom de répertoire.

Cette variable est une extension GNU et est déclarée dans errno.h.

Fonction :

char * program_invocation_short_name

La valeur de cette variable est le nom ayant été utilisé pour appeler le programme exécuté dans le processus actuel, avec les noms de répertoire supprimés. (C'est-à-dire qu'il s'agit du même que program_invocation_name moins tout jusqu'à la dernière barre oblique, le cas échéant.)

Cette variable est une extension GNU et est déclarée dans errno.h.

Le code d'initialisation de la bibliothèque configure ces deux variables avant d'appeler main.

Note de portabilité : si vous souhaitez que votre programme fonctionne avec des bibliothèques non GNU, vous devez enregistrer la valeur de argv[0] dans main, puis supprimer vous-même les noms de répertoire. Nous avons ajouté ces extensions pour permettre l'écriture de sous-routines de rapport d'erreurs autonomes ne nécessitant aucune coopération explicite de main.

Voici un exemple montrant comment gérer correctement l'échec d'ouverture d'un fichier. La fonction open_sesame essaie d'ouvrir le fichier nommé pour la lecture et renvoie un flux en cas de succès. La fonction de bibliothèque fopen renvoie un pointeur nul si elle n'a pas pu ouvrir le fichier pour une raison quelconque. Dans ce cas, open_sesame construit un message d'erreur approprié à l'aide de la fonction strerror et termine le programme. Si nous devions effectuer d'autres appels de bibliothèque avant de transmettre le code d'erreur à strerror, nous devrions plutôt l'enregistrer dans une variable locale, car ces autres fonctions de bibliothèque pourraient écraser errno entre-temps.

  1. #define _GNU_SOURCE
  2.  
  3. #include <errno.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. FILE * open_sesame (char *name) {
  9.   FILE *stream;
  10.  
  11.   errno = 0;
  12.   stream = fopen (name, "r");
  13.   if (stream == NULL) {
  14.       fprintf (stderr, "%s: Impossible d'ouvrir le fichier %s; %s\n", program_invocation_short_name, name, strerror (errno));
  15.       exit (EXIT_FAILURE);
  16.   }
  17.    else
  18.   return stream;
  19. }

L'utilisation de perror présente l'avantage d'être portable et disponible sur tous les systèmes implémentant ISO C. Mais souvent, le texte généré par perror n'est pas celui souhaité et il n'y a aucun moyen d'étendre ou de modifier ce que fait perror. La norme de codage GNU, par exemple, exige que les messages d'erreur soient précédés du nom du programme et que les programmes qui lisent certains fichiers d'entrée fournissent des informations sur le nom du fichier d'entrée et le numéro de ligne au cas où une erreur se produirait lors de la lecture du fichier. Pour ces occasions, deux fonctions sont disponibles et largement utilisées dans le projet GNU. Ces fonctions sont déclarées dans error.h.

Fonction :

void error (int status, int errnum, const char *format, ...)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap i18n | AC-Safe

La fonction error peut être utilisée pour signaler des problèmes généraux lors de l'exécution d'un programme. Le paramètre format est une chaîne de caractères de format comme celles données à la famille de fonctions printf. Les paramètres requis pour le format peuvent suivre le paramètre format. Tout comme perror, error peut également signaler un code d'erreur sous forme textuelle. Mais contrairement à perror, la valeur error est explicitement transmise à la fonction dans le paramètre errnum. Cela élimine le problème mentionné ci-dessus selon lequel la fonction de rapport d'erreur doit être appelée immédiatement après la fonction à l'origine de l'erreur, car sinon errno pourrait avoir une valeur différente.

error affiche d'abord le nom du programme. Si l'application a défini une variable globale error_print_progname et la pointe vers une fonction, cette fonction sera appelée pour afficher le nom du programme. Sinon, la chaîne de la variable globale program_name est utilisée. Le nom du programme est suivi de deux points et d'un espace qui à son tour est suivi de la sortie produite par la chaîne de caractères de format. Si le paramètre errnum est différent de zéro, la chaîne de caractères de format de sortie est suivie de deux points et d'un espace, suivis du message d'erreur pour le code d'erreur errnum. Dans tous les cas, la sortie se termine par un saut de ligne.

La sortie est dirigée vers le flux stderr. Si le stderr n'était pas orienté avant l'appel, il sera orienté de manière étroite par la suite.

La fonction retournera à moins que le paramètre status n'ait une valeur différente de zéro. Dans ce cas, la fonction appellera exit avec la valeur status pour son paramètre et ne retournera donc jamais. Si error revient, la variable globale error_message_count est incrémentée de un pour garder une trace du nombre d'erreurs signalées.

Fonction :

void error_at_line (int status, int errnum, const char *fname, unsigned int lineno, const char *format, ...)

Préliminaire : | MT-Unsafe race:error_at_line/error_one_per_line locale | AS-Unsafe corrupt heap i18n | AC-Unsafe corrupt/error_one_per_line

La fonction error_at_line est très similaire à la fonction error. Les seules différences sont les paramètres supplémentaires fname et lineno.

La gestion des autres paramètres est identique à celle de error, sauf qu'entre le nom du programme et la chaîne de caractères générée par la chaîne de format, du texte supplémentaire est inséré.

Directement après le nom du programme, un deux-points, suivi du nom de fichier pointé par fname, un autre deux-points et la valeur de lineno sont affichés.

Cette sortie supplémentaire est bien sûr destinée à être utilisée pour localiser une erreur dans un fichier d'entrée (comme un fichier de code source de langage de programmation,...).

Si la variable globale error_one_per_line est définie sur une valeur différente de zéro, error_at_line évitera d'afficher des messages consécutifs pour le même fichier et la même ligne. Les répétitions ne se suivant pas directement ne sont pas détectées.

Tout comme error, cette fonction ne renvoie que si status est nul. Sinon, exit est appelé avec une valeur différente de zéro. Si error renvoie, la variable globale error_message_count est incrémentée de un pour suivre le nombre d'erreurs signalées.

Comme mentionné ci-dessus, les fonctions error et error_at_line peuvent être personnalisées en définissant une variable nommée error_print_progname.

Variable :

void (*error_print_progname) (void)

Si la variable error_print_progname est définie sur une valeur différente de zéro, la fonction pointée est appelée par error ou error_at_line. Elle est censée afficher le nom du programme ou faire quelque chose de similaire.

La fonction est censée afficher dans le flux stderr et doit être capable de gérer l'orientation du flux.

La variable est globale et partagée par tous les processus léger.

Variable :

unsigned int error_message_count

La variable error_message_count est incrémentée à chaque fois qu'une des fonctions error ou error_at_line est renvoyée. La variable est globale et partagée par tous les processus léger.

Variable :

int error_one_per_line

La variable error_one_per_line n'influence que error_at_line. Normalement, la fonction error_at_line crée une sortie pour chaque appel. Si error_one_per_line est définie sur une valeur différente de zéro, error_at_line garde une trace du dernier nom de fichier et du numéro de ligne pour lesquels une erreur a été signalée et évite de suivre directement les messages pour le même fichier et la même ligne. Cette variable est globale et partagée par tous les processus léger.

Un programme lisant un fichier d'entrée et signale des erreurs dans celui-ci pourrait ressembler à ceci :

  1. {
  2.   char *line = NULL;
  3.   size_t len = 0;
  4.   unsigned int lineno = 0;
  5.  
  6.   error_message_count = 0;
  7.   while (! feof_unlocked (fp)) {
  8.    ssize_t n = getline (&line, &len, fp);
  9.    if (n <= 0) /* Fin de fichier ou erreur. */ break;
  10.    ++lineno;
  11.  
  12.    /* Traiter la ligne.*/
  13.    ...
  14.  
  15.   if (Detect error in line) error_at_line (0, errval, filename, lineno, "un texte d'erreur %s", some_variable);
  16.  }
  17.  if (error_message_count != 0) error (EXIT_FAILURE, 0, "%u erreurs trouvées", error_message_count);
  18. }

error et error_at_line sont clairement les fonctions de choix et permettent au programmeur d'écrire des applications suivant la norme de codage GNU. La bibliothèque glibc contient en plus des fonctions étant utilisées dans BSD dans le même but. Ces fonctions sont déclarées dans err.h. Il est généralement conseillé de ne pas utiliser ces fonctions. Elles sont incluses uniquement pour des raisons de compatibilité.

Fonction :

void warn (const char *format, ...)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap i18n | AC-Unsafe corrupt lock mem

La fonction warn est à peu près équivalente à un appel comme :

  1. error (0, errno, format, the parameters)

sauf que les variables globales error respects et modifies ne sont pas utilisées.

Fonction :

void vwarn (const char *format, va_list ap)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap i18n | AC-Unsafe corrupt lock mem

La fonction vwarn est identique à warn, sauf que les paramètres de gestion de la chaîne de format format sont transmis sous forme de valeur de type va_list.

Fonction :

void warnx (const char *format, ...)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe corrupt lock mem

La fonction warnx est à peu près équivalente à un appel comme :

  1. error (0, 0, format, the_parameters)

sauf que les variables globales error respects et modifies ne sont pas utilisées. La différence avec warn est qu'aucune chaîne de caractères de numéro d'erreur n'est affichée.

Fonction :

void vwarnx (const char *format, va_list ap)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe corrupt lock mem

La fonction vwarnx est identique à warnx, sauf que les paramètres de gestion de la chaîne de format format sont transmis sous forme de valeur de type va_list.

Fonction :

void err (int status, const char *format, ...)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap i18n | AC-Unsafe corrupt lock mem

La fonction err est à peu près équivalente à un appel comme :

  1. error (status, errno, format, the parameters)

sauf que les variables globales error respects et modifies ne sont pas utilisées et que le programme est quitté même si l'état est nul.

Fonction :

void verr (int status, const char *format, va_list ap)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap i18n | AC-Unsafe corrupt lock mem

La fonction verr est identique à err, sauf que les paramètres de gestion de la chaîne de format format sont transmis sous forme de valeur de type va_list.

Fonction :

void errx (int status, const char *format, ...)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe corrupt lock mem

La fonction errx est à peu près équivalente à un appel comme :

  1. error (status, 0, format, the parameters)

sauf que les variables globales error respects et modifies ne sont pas utilisées et que le programme est quitté même si status est zéro. La différence avec err est qu'aucune chaîne de numéro d'erreur n'est affichée.

Fonction :

void verrx (int status, const char *format, va_list ap)

Préliminaire : | MT-Safe locale | AS-Unsafe corrupt heap | AC-Unsafe corrupt lock mem

La fonction verrx est identique à errx, sauf que les paramètres de gestion de la chaîne de format format sont transmis sous forme de valeur de type va_list.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mercredi, le 1er janvier 2025