STDIN(3) Manuel du programmeur Linux STDIN(3)
NOM
stdin, stdout, stderr - Flux d'entrées / sorties stan
dards.
SYNOPSIS
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
DESCRIPTION
Normalement, tout programme Unix démarre avec 3 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 diagnostique 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 des ces symboles est une macro de stdio(3) de type
pointeur sur un FILE, et peut être utilisé dans des fonc
tions comme fprintf(3) ou fread(3).
Comme les FILEs sont simplement des coquilles entourant
les descripteurs de fichiers en ajoutant une mémoire tam
pon, il est également possible d'accéder aux fichiers Unix
"bruts", avec des fonctions comme read(2) ou lseek(2).
Les descripteurs des fichiers associés aux flux stdin,
stdout, et stderr sont respectivement 0, 1, et 2. Les
constantes symboliques STDIN_FILENO, STDOUT_FILENO, et
STDERR_FILENO sont définies avec ces valeurs dans
<unistd.h>.
Notez que l'utilisation conjointe des FILEs et des
descripteurs bruts risque de produire des résultats inat
tendus, 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 simple
ment une bibliothèque. Ceci signifie par exemple qu'après
un exec, le processus fils hérite de tous les descripteurs
LINUX 30 Avril 1998 1
STDIN(3) Manuel du programmeur Linux STDIN(3)
de fichiers ouverts, mais que les flux deviennent inacces
sibles.
Comme les symboles stdin, stdout, et stderr sont définis
comme des macros, il est interdit de leur assigner une
valeur. On peut utiliser la fonction de bibliothèque fre
open(3) pour réassigner les fluux standars de manière
portable.
Les flux standards 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)
CONSIDERATIONS
Le flux stderr n'a pas de buffer. Le flux stdout a un
buffer 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és, ou qu'un retour-chariot
soit écrit.
Ceci a parfois des effets inattendus, principalement lors
du debugging des programmes. La gestion des buffers des
flux standards (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é à un termi
nal, il peut également y avoir un buffer d'entrée dans le
pilote de terminal, sans aucune relation avec le buffer de
stdio. En fait, normalement, la saisie depuis un terminal
est gérée avec un buffer de ligne dans le noyau. Cette
gestion par le noyau peut être configurée en utilisant des
appels systèmes comme tcsetattr(3). Voir également stty(1)
ou termios(3).
STANDARDS
Les macros stdin, stdout, et stderr sont conformes au
standard Ansi C, et celui-ci stipule également que ces
trois flux doivent être ouverts au démarrage du programme.
TRADUCTION
Christophe Blaess, 1998.
LINUX 30 Avril 1998 2