Provided by:
manpages-es_1.55-10_all 
NAME
stdin, stdout, stderr -- flujos de la E/S estandar
SYNOPSIS
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
DESCRIPCI'ON
Bajo condiciones normales cualquier programa Unix tiene tres flujos de
E/S abiertos cuando arranca: uno para la entrada, otro para la salida y
otro para imprimir los diagnosticos o mensajes de error. Estos flujos
estan tipicamente ligados al terminal de usuario (ver tty(4)) pero
podrian referirse a ficheros o a otros dispositivos, segun lo que decida
el proceso padre. (Ver tambien la seccion "Redireccion" de sh(1) .)
El flujo de entrada se conoce como "entrada estandar"; el flujo de salida
como "salida estandar"; y el flujo de error como "error estandar". Estos
terminos se abrevian para formar los simbolos utilizados para referirse a
esos ficheros, esto es, stdin, stdout y stderr.
Cada uno de estos simbolos es una macro de stdio(3) del tipo "puntero a
FILE" y pueden ser utilizados por funciones como fprintf(3) o fread(3).
Ya que los FILEs son un envoltorio con buffer sobre los descriptores de
fichero de Unix, los mismos ficheros subyacentes pueden ser accedidos
tambien utilizando el interface crudo (raw) de ficheros de Unix, es
decir, las funciones como read(2) y lseek(2). Los descriptores de
fichero asociados con los flujos stdin, stdout y stderr son 0, 1 y 2,
respectivamente. Los simbolos del preprocesador STDIN_FILENO,
STDOUT_FILENO y STDERR_FILENO son definidos con esos valores en
<unistd.h>.
Es necesario tener en cuenta que la mezcla de FILEs y descriptores de
fichero crudos puede producir resultados inesperados y se deberia evitar.
(Para los masoquistas: POSIX.1, section 8.2.3, describe en detalle como
se supone que funciona esta interaccion). Una regla general es que los
descriptores de fichero son gestionados por el nucleo, mientras que stdio
es una simple biblioteca. Esto significa, por ejemplo, que tras un exec,
el hijo hereda todos los descriptores de ficheros abiertos, pero los
flujos antiguos se hacen inaccesibles.
Ya que los simbolos stdin, stdout y stderr son especificados como macros,
las asignaciones a ellos no son portables. Se puede hacer que los flujos
estandares referencien a otros ficheros con ayuda de la funcion de
biblioteca freopen(3), introducida especialmente para hacer posible
reasignar stdin, stdout y stderr. Los flujos estandares se cierran
llamando a exit(3) y por la terminacion normal del programa.
V'EASE TAMBI'EN
sh(1), csh(1), open(2), fopen(3), stdio(3)
CONSIDERACIONES
El flujo stderr no utiliza buffers. El flujo stdout tiene un buffer de
lineas cuando apunta a un terminar. Las lineas no aparecen hasta que se
llama a fflush(3) o a exit(3) , o se imprime una nueva linea ("\n"). Esto
puede producir resultados inesperados, especialmente en depuracion. El
modo "buffer" de los flujos estandares (o de cualquier otro flujo) se
puede cambiar con llamadas a setbuf(3) o setvbuf(3) Es necesario tener en
cuenta que en caso de que stdin este asociado con un terminal, podria
haber tambien entrada via buffer en el driver del terminal, sin relacion
alguna con el buffer de stdio. (De hecho, las entradas normales de
terminal utilizan un buffer de lineas en el nucleo). Esta gestion de
entradas del nucleo puede ser modificada utilizando llamadas como
tcsetattr(3); ver tambien stty(1), y termios(3).
CONFORME A
Las macros stdin, stdout, y stderr cumplen el ANSI X3.159-1989
(``ANSI C89''), y este estandar tambien estipula que esos tres flujos se
deberian abrir al comienzo del programa.