Provided by:
manpages-fr-dev_3.32d0.2p4-1_all 
NOM
printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf,
vsnprintf - Formatage des sorties
SYNOPSIS
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
Exigences de macros de test de fonctionnalites pour la glibc (consultez
feature_test_macros(7)) :
snprintf(), vsnprintf() :
_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _ISOC99_SOURCE ||
_POSIX_C_SOURCE >= 200112L
ou cc -std=c99
DESCRIPTION
Les fonctions de la famille printf() produisent des sorties en accord
avec le format decrit plus bas. Les fonctions printf() et vprintf()
ecrivent leur sortie sur stdout, le flux de sortie standard. fprintf()
et vfprintf() ecrivent sur le flux stream indique. sprintf(),
snprintf(), vsprintf() et vsnprintf() ecrivent leurs sorties dans la
chaine de caracteres str.
Les fonctions snprintf() et vsnprintf() ecrivent au plus size octets
(caractere nul (<< \0 >>) final compris) dans str.
Les fonctions vprintf(), vfprintf(), vsprintf(), vsnprintf() sont
equivalentes aux fonctions printf(), fprintf(), sprintf(), snprintf()
respectivement, mais elles emploient un tableau va_list a la place d'un
nombre variable d'arguments. Ces fonctions n'appellent pas la macro
va_end. Du fait qu'elles appelent la macro va_arg, la valeur de ap
n'est pas definie apres l'appel. Consultez stdarg(3).
Ces huit fonctions creent leurs sorties sous le controle d'une chaine
de format qui indique les conversions a apporter aux arguments suivants
(ou accessibles a travers les arguments de taille variable de
stdarg(3)).
C99 et POSIX.1-2001 specifient que les resultats ne sont pas definis si
un appel a sprintf(), snprintf(), vsprintf() ou vsnprintf() causait la
copie entre des objets qui se chevauchent (par exemple, si le tableau
de la chaine cible et un des parametres d'entree se trouvent dans le
meme tampon). Consultez la section NOTES.
VALEUR RENVOY'EE
En cas de succes, ces fonctions renvoient le nombre de caracteres
affiches (sans compter le caractere nul de fin utilise pour terminer
les sorties dans les chaines).
Ces fonctions renvoient le nombre de caracteres imprimes, sans compter
le caractere nul << \0 >> final dans les chaines. Les fonctions
snprintf() et vsnprintf() n'ecrivent pas plus de size octets (y compris
le << \0 >> final). Si la sortie a ete tronquee a cause de la limite,
la valeur de retour est le nombre de caracteres (sans le << \0 >>
final) qui auraient ete ecrits dans la chaine s'il y avait eu
suffisamment de place. Ainsi, une valeur de retour size ou plus
signifie que la sortie a ete tronquee (voir aussi la section NOTES plus
bas).
Si une erreur de sortie s'est produite, une valeur negative est
renvoyee.
CHA^INE DE FORMAT
Le format de conversion est indique par une chaine de caracteres,
commencant et se terminant dans son etat de decalage initial. La chaine
de format est composee d'indicateurs : les caracteres ordinaires
(differents de %), qui sont copies sans modification sur la sortie, et
les specifications de conversion, qui sont mises en correspondance avec
les arguments suivants. Les specifications de conversion sont
introduites par le caractere %, et se terminent par un indicateur de
conversion. Entre eux peuvent se trouver (dans l'ordre), zero ou
plusieurs attributs, une valeur optionnelle de largeur minimal de
champ, une valeur optionnelle de pr'ecision, et un eventuel modificateur
de longueur.
Les arguments doivent correspondre correctement (apres les promotions
de types) avec les indicateurs de conversion. Par defaut les arguments
sont pris dans l'ordre indique, ou chaque << * >> et chaque indicateur
de conversion reclament un nouvel argument (et ou l'insuffisance en
arguments est une erreur). On peut aussi preciser explicitement quel
argument prendre, en ecrivant, a chaque conversion, << %m$ >> au lieu
de << % >>, et << *m$ >> au lieu de << * >>. L'entier decimal m indique
la position dans la liste d'arguments, l'indexation commencant a 1.
Ainsi,
printf("%*d", width, num);
et
printf("%2$*1$d", width, num);
sont equivalents. La seconde notation permet de repeter plusieurs fois
le meme argument. Le standard C99 n'autorise pas le style utilisant
<< $ >>, qui provient des Specifications Single UNIX. Si le style avec
<< $ >> est utilise, il faut l'employer pour toutes conversions prenant
un argument, et pour tous les arguments de largeur et de precision,
mais on peut le melanger avec des formats << %% >> qui ne consomment
pas d'arguments. Il ne doit pas y avoir de sauts dans les numeros des
arguments specifies avec << $ >>. Par exemple, si les arguments 1 et 3
sont specifies, l'argument 2 doit aussi etre mentionne quelque part
dans la chaine de format.
Pour certaines conversions numeriques, un caractere de separation
decimale (le point par defaut) est utilise, ainsi qu'un caractere de
regroupement par milliers. Les veritables caracteres dependent de la
localisation LC_NUMERIC. La localisation POSIX utilise << . >> comme
separateur decimal, et n'a pas de caractere de regroupement. Ainsi,
printf("%'.2f", 1234567.89);
s'affichera comme << 1234567.89 >> dans la localisation POSIX,
<< 1 234 567,89 >> en localisation fr_FR, et << 1.234.567,89 >> en
localisation da_DK.
CARACT`ERE D'ATTRIBUT
Le caractere % peut etre eventuellement suivi par un ou plusieurs
attributs suivants :
# indique que la valeur doit etre convertie en une autre forme.
Pour la conversion o le premier caractere de la chaine de sortie
vaudra zero (en ajoutant un prefixe 0 si ce n'est pas deja un
zero). Pour les conversions x et X une valeur non nulle recoit
le prefixe << 0x >> (ou << 0X >> pour l'indicateur X). Pour les
conversions a, A, e, E, f, F, g, et G le resultat contiendra
toujours un point decimal meme si aucun chiffre ne le suit
(normalement, un point decimal n'est present avec ces
conversions que si des decimales le suivent). Pour les
conversions g et G les zeros en tete ne sont pas elimines,
contrairement au comportement habituel. Pour les autres
conversions, cet attribut n'a pas d'effet.
0 indique le remplissage avec des zeros. Pour les conversions d,
i, o, u, x, X, a, A, e, E, f, F, g, et G, la valeur est
completee a gauche avec des zeros plutot qu'avec des espaces. Si
les attributs 0 et - apparaissent ensemble, l'attribut 0 est
ignore. Si une precision est fournie avec une conversion
numerique (d, i, o, u, x, et X), l'attribut 0 est ignore. Pour
les autres conversions, le comportement est indefini.
- indique que la valeur doit etre justifiee sur la limite gauche
du champ (par defaut elle l'est a droite). Sauf pour la
conversion n, les valeurs sont completees a droite par des
espaces, plutot qu'a gauche par des zeros ou des blancs. Un
attribut - surcharge un attribut 0 si les deux sont fournis.
' ' (un espace) indique qu'un espace doit etre laisse avant un
nombre positif (ou une chaine vide) produit par une conversion
signee
+ Un signe (+ ou -) doit toujours etre imprime avant un nombre
produit par une conversion signee. Par defaut, un signe n'est
utilise que pour des valeurs negatives. Un attribut + surcharge
un attribut << espace >> si les deux sont fournis.
Les cinq caracteres d'attributs ci-dessus sont definis dans le standard
C, les specifications SUSv2 en ajoute un :
' Pour les conversions decimales (i, d, u, f, F, g, G) indique que
les chiffres d'un argument numerique doivent etre groupes par
milliers en fonction de la localisation. Remarquez que de
nombreuses versions de gcc(1) n'acceptent pas cet attribut et
declencheront un avertissement (warning). SUSv2 n'inclue pas
%'F.
La glibc 2.2 ajoute un caractere d'attribut supplementaire.
I Pour les conversions decimales (i, d, u) la sortie emploie les
chiffres alternatifs de la localisation s'il y en a. Par
exemple, depuis la glibc 2.2.3, cela donnera des chiffres arabes
pour la localisation perse (<< fa_IR >>).
LARGEUR DE CHAMP
Un nombre optionnel ne commencant pas par un zero, peut indiquer une
largeur minimale de champ. Si la valeur convertie occupe moins de
caracteres que cette largeur, elle sera completee par des espaces a
gauche (ou a droite si l'attribut d'alignement a gauche a ete fourni).
A la place de la chaine representant le nombre decimal, on peut ecrire
<< * >> ou << *m$ >> (m etant entier) pour indiquer que la largeur du
champ est fournie dans l'argument suivant, ou dans le m-ieme argument,
respectivement. L'argument fournissant la largeur doit etre de type
int. Une largeur negative est considere comme l'attribut << - >> vu
plus haut suivi d'une largeur positive. En aucun cas une largeur trop
petite ne provoque la troncature du champ. Si le resultat de la
conversion est plus grand que la largeur indiquee, le champ est elargi
pour contenir le resultat.
PR'ECISION
Une precision eventuelle, sous la forme d'un point (<< . >>) suivi par
un nombre. A la place de la chaine representant le nombre decimal, on
peut ecrire << * >> ou << *m$ >> (m etant entier) pour indiquer que la
precision est fournie dans l'argument suivant, ou dans le m-ieme
argument, respectivement. L'argument fournissant la precision doit etre
de type int. Si la precision ne contient que le caractere << . >>, ou
une valeur negative, elle est consideree comme nulle. Cette precision
indique un nombre minimal de chiffres a faire apparaitre lors des
conversions d, i, o, u, x, et X, le nombre de decimales a faire
apparaitre pour les conversions a, A, e, E, f et F, le nombre maximal
de chiffres significatifs pour g et G, et le nombre maximal de
caracteres a imprimer depuis une chaine pour les conversions s et S.
MODIFICATEUR DE LONGUEUR
Ici, une conversion entiere correspond a d, i, o, u, x ou X.
hh La conversion entiere suivante correspond a un signed char ou
unsigned char, ou la conversion n suivante correspond a un
argument pointeur sur un signed char.
h La conversion entiere suivante correspond a un short int ou
unsigned short int, ou la conversion n suivante correspond a un
argument pointeur sur un short int.
l (elle) La conversion entiere suivante correspond a un long int
ou unsigned long int, ou la conversion n suivante correspond a
un pointeur sur un long int, ou la conversion c suivante
correspond a un argument wint_t, ou encore la conversion s
suivante correspond a un pointeur sur un wchar_t.
ll (elle-elle) La conversion entiere suivante correspond a un long
long int, ou unsigned long long int, ou la conversion n suivante
correspond a un pointeur sur un long long int.
L La conversion a, A, e, E, f, F, g, ou G suivante correspond a un
argument long double (C99 autorise %LF mais pas SUSv2).
q (<< quad >> BSD 4.4 et Linux sous libc5 seulement, ne pas
utiliser) Il s'agit d'un synonyme pour ll.
j La conversion entiere suivante correspond a un argument intmax_t
ou uintmax_t.
z La conversion entiere suivante correspond a un argument size_t
ou ssize_t (la bibliotheque libc5 de Linux proposait l'argument
Z pour cela, ne pas utiliser).
t La conversion entiere suivante correspond a un argument
ptrdiff_t.
Les specifications SUSv2 ne mentionnent que les modificateurs de
longueur h (dans hd, hi, ho, hx, hX, hn), l (dans ld, li, lo, lx, lX,
ln, lc, ls) et L (dans Le, LE, Lf, Lg, LG).
INDICATEUR DE CONVERSION
Un caractere indique le type de conversion a apporter. Les indicateurs
de conversion, et leurs significations sont :
d, i L'argument int est converti en un chiffre decimal signe. La
precision, si elle est mentionnee, correspond au nombre minimal
de chiffres qui doivent apparaitre. Si la conversion fournit
moins de chiffres, le resultat est rempli a gauche avec des
zeros. Par defaut la precision vaut 1. Lorsque 0 est converti
avec une precision valant 0, la sortie est vide.
o, u, x, X
L'argument unsigned int est converti en un chiffre octal non
signe (o), un chiffre decimal non signe (u), un chiffre
hexadecimal non signe (x et X). Les lettres abcdef sont
utilisees pour les conversions avec x, les lettres ABCDEF sont
utilisees pour les conversions avec X. La precision, si elle est
indiquee, donne un nombre minimal de chiffres a faire
apparaitre. Si la valeur convertie necessite moins de chiffres,
elle est completee a gauche avec des zeros. La precision par
defaut vaut 1. Lorsque 0 est converti avec une precision valant
0, la sortie est vide.
e, E L'argument reel, de type double, est arrondi et presente avec la
notation scientifique [-]c.ccce+-cc dans lequel se trouve un
chiffre avant le point, puis un nombre de decimales egal a la
precision demandee. Si la precision n'est pas indiquee,
l'affichage contiendra 6 decimales. Si la precision vaut zero,
il n'y a pas de point decimal. Une conversion E utilise la
lettre E (plutot que e) pour introduire l'exposant. Celui-ci
contient toujours au moins deux chiffres. Si la valeur affichee
est nulle, son exposant est 00.
f, F L'argument reel, de type double, est arrondi, et presente avec
la notation classique [-]ccc.ccc, ou le nombre de decimales est
egal a la precision reclamee. Si la precision n'est pas
indiquee, l'affichage se fera avec 6 decimales. Si la precision
vaut zero, aucun point n'est affiche. Lorsque le point est
affiche, il y a toujours au moins un chiffre devant.
SUSv2 ne mentionne pas F et dit qu'il existe une chaine de
caracteres representant l'infini ou NaN. Le standard C99 precise
<< [-]inf >> ou << [-]infinity >> pour les infinis, et une
chaine commencant par << nan >> pour NaN dans le cas d'une
conversion f, et les chaines << [-]INF >> << [-]INFINITY >>
<< NAN* >> pour une conversion F.
g, G L'argument reel, de type double, est converti en style f ou e
(ou F ou E pour la conversion G) La precision indique le nombre
de decimales significatives. Si la precision est absente, une
valeur par defaut de 6 est utilisee. Si la precision vaut 0,
elle est consideree comme valant 1. La notation scientifique e
est utilisee si l'exposant est inferieur a -4 ou superieur ou
egal a la precision demandee. Les zeros en fin de partie
decimale sont supprimes. Un point decimal n'est affiche que s'il
est suivi d'au moins un chiffre.
a, A (C99 mais pas SUSv2). Pour la conversion a, l'argument de type
double est transforme en notation hexadecimale (avec les lettres
abcdef) dans le style [-]0xh.hhhhp+-d; Pour la conversion A, le
prefixe 0X, les lettres ABCDEF et le separateur d'exposant P
sont utilises. Il y a un chiffre hexadecimal avant la virgule,
et le nombre de chiffres ensuite est egal a la precision. La
precision par defaut suffit pour une representation exacte de la
valeur, si une representation exacte est possible en base 2.
Sinon, elle est suffisamment grande pour distinguer les valeurs
de type double. Le chiffre avant le point decimal n'est pas
specifie pour les nombres non normalises, et il est non nul pour
les nombres normalises.
c S'il n'y a pas de modificateur l, l'argument entier, de type
int, est converti en un unsigned char, et le caractere
correspondant est affiche. Si un modificateur l est present,
l'argument de type wint_t (caractere large) est converti en
sequence multioctet par un appel a wcrtomb(3), avec un etat de
conversion debutant dans l'etat initial. La chaine multioctet
resultante est ecrite.
s S'il n'y a pas de modificateur l, l'argument de type const char
* est suppose etre un pointeur sur un tableau de caracteres
(pointeur sur une chaine). Les caracteres du tableau sont ecrits
jusqu'a l'octet nul (<< \0 >>) final, non compris. Si une
precision est indiquee, seul ce nombre de caracteres sont
ecrits. Si une precision est fournie, il n'y a pas besoin de
caractere nul. Si la precision n'est pas donnee, ou si elle est
superieure a la longueur de la chaine, le caractere nul final
est necessaire.
Si un modificateur l est present, l'argument de type const
wchar_t * est suppose etre un pointeur sur un tableau de
caracteres larges. Les caracteres larges du tableau sont
convertis en une sequence de caracteres multioctet (chacun par
un appel de wcrtomb(3), avec un etat de conversion dans l'etat
initial avant le premier caractere large), ceci jusqu'au
caractere large nul final compris. Les caracteres multioctet
resultants sont ecris jusqu'a l'octet nul final (non compris).
Si une precision est fournie, il n'y a pas plus d'octets ecrits
que la precision indiquee, mais aucun caractere multioctet n'est
ecrit partiellement. Remarquez que la precision concerne le
nombre d'octets ecrits, et non pas le nombre de caract`eres
larges ou de positions d''ecrans. La chaine doit contenir un
caractere large nul final, sauf si une precision est indiquee,
suffisamment petite pour que le nombre d'octets ecrits la
remplisse avant la fin de la chaine.
C (dans SUSv2 mais pas dans C99) Synonyme de lc. Ne pas utiliser.
S (dans SUSv2 mais pas dans C99) Synonyme de ls. Ne pas utiliser.
p L'argument pointeur, du type void * est affiche en hexadecimal,
comme avec %#x ou %#lx.
n Le nombre de caracteres deja ecrits est stocke dans l'entier
indique par l'argument pointeur de type int *. Aucun argument
n'est converti.
m (extension glibc) Affiche la sortie strerror(errno). Aucun
argument n'est requis.
% Un caractere << % >> est ecrit. Il n'y a pas de conversion.
L'indicateur complet est << %% >>.
CONFORMIT'E
Les fonctions fprintf(), printf(), sprintf(), vprintf(), vfprintf() et
vsprintf() sont conformes a C89 et C99. Les fonctions snprintf() et
vsnprintf() sont conformes a C99.
En ce qui concerne la valeur de retour de snprintf(), SUSv2 et C99 sont
en contradiction : lorsque snprintf() est appelee avec un argument
size=0 SUSv2 precise une valeur de retour indeterminee, inferieure a 1,
alors que C99 autorise str a etre NULL dans ce cas, et reclame en
valeur de retour (comme toujours) le nombre de caracteres qui auraient
ete ecrits si la chaine de sortie avait ete assez grande.
La bibliotheque libc4 de Linux connaissait les 5 attributs standards du
C. Elle connaissait les modificateurs de longueur h, l, L et les
conversions c, d, e, E, f, F, g, G, i, n, o, p, s, u, x et X, ou F
etait synonyme de f. De plus, elle acceptait D, O et U comme synonymes
de ld, lo et lu (ce qui causa de serieux bogues par la suite lorsque le
support de %D disparut). Il n'y avait pas de separateur decimal
dependant de la localisation, pas de separateur des milliers, pas de
NaN ou d'infinis, et pas de << %m$ >> ni << *m$ >>.
La bibliotheque libc5 de Linux connaissait les 5 attributs standards C,
l'attribut << ' >>, la localisation, << %m$ >> et << *m$ >>. Elle
connaissait les modificateurs de longueur h, l, L, Z et q, mais
acceptait L et q pour les long double et les long long int (ce qui est
un bogue). Elle ne reconnaissait plus F, D, O et U, mais ajoutait le
caractere de conversion m, qui affiche strerror(errno).
La bibliotheque glibc 2.0 ajouta les caracteres de conversion C et S.
La bibliotheque glibc 2.1 ajouta les modificateurs de longueur hh, t et
z, et les caracteres de conversion a et A.
La bibliotheque glibc 2.2. ajouta le caractere de conversion F avec la
semantique C99, et le caractere d'attribut I.
NOTES
Certains programmes reposent imprudemment sur du code comme :
sprintf(buf, "%s some further text", buf);
pour ajouter du texte a buf. Cependant, les normes indiquent
explicitement que le resultat n'est pas defini si les tampons de source
et de destination se recouvrent lors d'un appel a sprintf(),
snprintf(), vsprintf() et vsnprintf(). En fonction de la version de
gcc(1) utilisee et des options de compilation, ces appels ne produiront
pas le resultat attendu.
L'implementation des fonctions snprintf() et vsnprintf() de la glibc se
conforme au standard C99, et se comporte comme decrit plus haut depuis
la glibc 2.1. Jusqu'a la glibc 2.0.6, elles renvoyaient -1 si la sortie
avait ete tronquee.
BOGUES
Comme sprintf() et vsprintf() ne font pas de suppositions sur la
longueur des chaines, le programme appelant doit s'assurer de ne pas
deborder l'espace d'adressage. C'est souvent difficile. Notez que la
longueur des chaines peut varier avec la localisation et etre
difficilement previsible. Il faut alors utiliser snprintf() ou
vsnprintf() a la place (ou encore asprintf(3) et vasprintf(3)).
La libc4.[45] de Linux n'avait pas snprintf(), mais proposait une
bibliotheque libbsd qui contenait un snprintf() equivalent a sprintf(),
c'est-a-dire qui ignorait l'argument size. Ainsi, l'utilisation de
snprintf() avec les anciennes libc4 pouvait conduire a de serieux
problemes de securite.
Un code tel que printf(foo); indique souvent un bogue, car foo peut
contenir un caractere << % >>. Si foo vient d'une saisie non securisee,
il peut contenir %n, ce qui autorise printf() a ecrire dans la memoire,
et cree une faille de securite.
EXEMPLE
Pour afficher pi avec cinq decimales :
#include <math.h>
#include <stdio.h>
fprintf (stdout, "pi = %.5f\n", 4 * atan (1.0));
Pour afficher une date et une heure sous la forme << Sunday, July 3,
23:15 >>, ou jour_semaine et mois sont des pointeurs sur des chaines :
#include <stdio.h>
fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
jour_semaine, mois, jour, heure, minute);
De nombreux pays utilisent un format de date different, comme
jour-mois-annee. Une version internationale doit donc etre capable
d'afficher les arguments dans l'ordre indique par le format :
#include <stdio.h>
fprintf(stdout, format,
jour_semaine, mois, jour, heure, min);
ou le format depend de la localisation et peut permuter les arguments.
Avec la valeur :
"%1$s, %3$d. %2$s, %4$d:%5$.2d\n"
On peut obtenir << Dimanche, 3 Juillet, 23:15 >>.
Pour allouer une chaine de taille suffisante et ecrire dedans (code
correct aussi bien pour glibc 2.0 que glibc 2.1) :
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
char *
make_message(const char *fmt, ...)
{
int n;
int size = 100; /* Supposons que nous n'avons pas besoin de plus de 100 octets. */
char *p, *np;
va_list ap;
if ((p = malloc(size)) == NULL)
return NULL;
while (1) {
/* Essayons d'ecrire dans l'espace alloue. */
va_start(ap, fmt);
n = vsnprintf(p, size, fmt, ap);
va_end(ap);
/* Si cela fonctionne, renvoie la chaine. */
if (n > -1 && n < size)
return p;
/* Sinon, essayons encore avec plus de place. */
if (n > -1) /* glibc 2.1 */
size = n+1; /* exactemen ce qui est necessaire */
else /* glibc 2.0 */
size *= 2; /* double la taille */
if ((np = realloc (p, size)) == NULL) {
free(p);
return NULL;
} else {
p = np;
}
}
}
VOIR AUSSI
printf(1), asprintf(3), dprintf(3), scanf(3), setlocale(3), wcrtomb(3),
wprintf(3), locale(5)
COLOPHON
Cette page fait partie de la publication 3.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Nicolas
Francois et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.