Cuando se inicia la ejecución de un programa C se produce la apertura automàtica de tres ficheros, antes de que llegue a producirse la llamada a main(). Estos ficheros son la entrada estándar "stdin" (standard input, normalmente el teclado) la salida estàndar "stdout" (standard output, normalmente la pantalla de vídeo) y el fichero estàndar de salida de errores "stederr" (standard error, normalmente la pantalla de video).
Este encaminamiento normal de los ficheros estándar (pantalla y teclado por defecto), puede verse modificado a través del intérprete de comandos de Unix y reencaminado hacia ficheros, "tuberías" (pipes) o regiones de memoria compartida.
La librería estándar de E/S declara stdin, stdout y stderr como punteros a estructuras FILE para los ficheros de ejitrada estándar, salida estándar y fichero estándar de errores, respectivamente.
Las funciones getchar y putehar son macros, en lugar de auténticas funciones, definidas en
#define getchar() getc(stdin)
#define putchar(c) putc(c, stdout)
Hay que advertir que stdin, stdout y stderr son constantes y no pueden ser reasingnados mediante fopen como podrìa parecer natural.
stdout = fopen("myfile", "w");
no es un procedimiento válido para redireccionar la salida estándar al fichero myfile. Sin embargo,
freopen("myfile", "w", stdout);
sí podría servir para este propósito, debido a que freopen cierra y abre el fichero, como comentamos anteriormente.