Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
STDIN
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VOIR AUSSI
- CONSIDÉRATIONS
- CONFORMITÉ
- TRADUCTION
24 mars 1998
Linux 2.0
NOM
stdin
stdout
stderr
- Flux d'entrées-sorties standard
SYNOPSIS
Fd #include <stdio.h>
Fd extern FILE *stdin;
Fd extern FILE *stdout;
Fd extern FILE *stderr;
DESCRIPTION
Normalement, tout programme Unix démarre avec trois flux déjà ouverts, l'un
pour l'entrée des données, un autre pour la sortie des données, et un
troisième pour l'affichage des messages de diagnostic ou d'erreur. Ces trois
flux sont typiquement attachés au terminal de l'utilisateur (voir
tty(4)),
mais peuvent également être redirigés vers des fichiers ou vers
d'autres périphériques suivant les choix du processus parent (voir le
paragraphe « Redirection » dans
sh(1)).
Le flux d'entrée est appelé « entrée standard » (standard input), le flux
de sortie « sortie standard » (standard output), et le flux d'erreur est
souvent appelé « erreur standard » (standard error). Ces noms sont abrégés
dans les dénominations symboliques de ces fichiers :
stdin
stdout
et
stderr
Chacun de ces symboles est une macro de
stdio(3)
de type pointeur sur
un FILE, et peut être utilisé dans des fonctions comme
fprintf(3)
ou
fread(3).
Comme les FILE sont simplement des coquilles entourant les descripteurs de
fichiers en ajoutant une mémoire tampon, il est également possible d'accéder
aux fichiers Unix « bruts », avec des fonctions comme
read(2)
et
lseek(2).
Au démarrage du programme, les descripteurs de fichiers associés aux flux
stdin
stdout
et
stderr
valent respectivement 0, 1 et
2. Les constantes symboliques STDIN_FILENO, STDOUT_FILENO, et STDERR_FILENO
sont définies avec ces valeurs dans <unistd.h> (appliquer
freopen(3)
sur l'un de ces flux peut modifier le numéro de descripteur de
fichier associé au flux).
Notez que l'utilisation conjointe des FILE et des descripteurs bruts risque
de produire des résultats inattendus, et doit être généralement évitée. Pour
les plus masochistes d'entre-vous, POSIX.1 décrit en détail, dans son
paragraphe 8.2.3, comment ces interactions sont censées fonctionner. Une
règle générale est que les descripteurs de fichiers sont manipulés par le
noyau, alors que stdio est simplement une bibliothèque. Ceci signifie par
exemple qu'après un
Fn exec ,
le processus fils hérite de tous les
descripteurs de fichiers ouverts, mais que les flux deviennent
inaccessibles.
Les symboles
stdin
stdout
et
stderr
étant définis
comme des macros, il est interdit de leur assigner une valeur. On peut
utiliser la fonction de bibliothèque
freopen(3),
spécialement conçue
pour réassigner
stdin
stdout
et
stderr
Les flux
standard sont fermés lors d'un appel à
exit(3)
ou lors d'une fin
normale de programme.
VOIR AUSSI
sh(1),
csh(1),
open(2),
fopen(3),
stdio(3)
CONSIDÉRATIONS
Le flux
stderr
n'a pas de tampon. Le flux
stdout
a un tampon
de ligne lorsqu'il est dirigé vers un terminal. Les lignes partielles
n'apparaîtront pas avant que
fflush(3)
ou
exit(3)
ne soient
invoquées, ou qu'un retour-chariot soit écrit. Ceci a parfois des effets
inattendus, principalement lors du débogage des programmes. La gestion des
tampons des flux standard (et des autres flux également) peut être modifiée
en utilisant
setbuf(3)
ou
setvbuf(3).
Remarquez que dans le cas
où
stdin
est associée à un terminal, il peut également y avoir un
tampon d'entrée dans le pilote de terminal, sans aucune relation avec le
tampon de stdio (en effet, normalement, la saisie depuis un terminal est
gérée avec un tampon de ligne dans le noyau). Cette gestion par le noyau
peut être configurée en utilisant des appels système comme
tcsetattr(3).
Voir également
stty(1)
et
termios(3).
CONFORMITÉ
Les macros
stdin
stdout
et
stderr
sont conformes au
standard
St -ansiC ,
et celui-ci stipule également que ces trois flux
doivent être ouverts au démarrage du programme.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en
utilisant la commande
« man -L C <section> <page_de_man> ».
|