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