Provided by: manpages-es_1.55-10_all bug

NAME

     stdin, stdout, stderr — flujos de la E/S estándar

SYNOPSIS

     #include <stdio.h>
     extern FILE *stdin;
     extern FILE *stdout;
     extern FILE *stderr;

DESCRIPCIÓN

     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 diagnósticos o
     mensajes de error. Estos flujos están típicamente ligados al terminal de usuario (ver
     tty(4)) pero podrían referirse a ficheros o a otros dispositivos, según lo que decida el
     proceso padre. (Ver también la sección "Redirección" de sh(1) .)

     El flujo de entrada se conoce como "entrada estándar"; el flujo de salida como "salida
     estándar"; y el flujo de error como "error estándar". Estos términos se abrevian para formar
     los símbolos utilizados para referirse a esos ficheros, esto es, stdin, stdout y stderr.

     Cada uno de estos símbolos 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 búffer sobre los descriptores de fichero de Unix, los
     mismos ficheros subyacentes pueden ser accedidos también 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
     símbolos 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 debería evitar.  (Para los masoquistas: POSIX.1,
     section 8.2.3, describe en detalle cómo se supone que funciona esta interacción).  Una regla
     general es que los descriptores de fichero son gestionados por el núcleo, 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 símbolos stdin, stdout y stderr son especificados como macros, las asignaciones a
     ellos no son portables.  Se puede hacer que los flujos estándares referencien a otros
     ficheros con ayuda de la función de biblioteca freopen(3), introducida especialmente para
     hacer posible reasignar stdin, stdout y stderr.  Los flujos estándares se cierran llamando a
     exit(3) y por la terminación normal del programa.

VÉASE TAMBIÉN

     sh(1), csh(1), open(2), fopen(3), stdio(3)

CONSIDERACIONES

     El flujo stderr no utiliza búffers. El flujo stdout tiene un búffer de líneas cuando apunta
     a un terminar. Las líneas no aparecen hasta que se llama a fflush(3) o a exit(3) , o se
     imprime una nueva línea ("\n"). Esto puede producir resultados inesperados, especialmente en
     depuración.  El modo "buffer" de los flujos estándares (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 esté asociado con un terminal, podría haber también entrada vía buffer en el
     driver del terminal, sin relación alguna con el búffer de stdio.  (De hecho, las entradas
     normales de terminal utilizan un búffer de líneas en el núcleo).  Esta gestión de entradas
     del núcleo puede ser modificada utilizando llamadas como tcsetattr(3); ver también stty(1),
     y termios(3).

CONFORME A

     Las macros stdin, stdout, y stderr cumplen el ANSI X3.159-1989 (“ANSI C89”), y este estándar
     también estipula que esos tres flujos se deberían abrir al comienzo del programa.