En C, una "corriente" es una abstracción; desde la perspectiva del programa, es simplemente un productor (flujo de entrada) o consumidor (flujo de salida) de bytes. Puede corresponder a un archivo en el disco, a una tubería, a su terminal, o a algún otro dispositivo como una impresora o tty. El tipo FILE
contiene información sobre la transmisión. Normalmente, no se entromete con los contenidos de un objeto FILE
directamente, simplemente le pasa un puntero a las diversas rutinas de E/S.
Hay tres flujos estándares: stdin
es un puntero al flujo de entrada estándar, stdout
es un puntero al flujo de salida estándar y stderr
es un puntero al flujo de salida de error estándar. En una sesión interactiva, los tres por lo general se refieren a la consola, aunque se puede redirigir para que apunten a otros archivos o dispositivos:
$ myprog <inputfile.dat> output.txt 2> errors.txt
En este ejemplo, stdin
ahora apunta a inputfile.dat
, stdout
puntos a output.txt
, y stderr
apunta a errors.txt
.
fprintf
escribe texto formateado en la secuencia de salida que especifique.
printf
es equivalente a escribir fprintf(stdout, ...)
y escribe texto formateado dondequiera que esté apuntando la corriente de salida estándar.
sprintf
escribe texto formateado en una matriz de char
, en contraposición a una secuencia.
Experimenta con ellos escribiendo algún código de muestra. Esa es una manera muy fácil de * entender * claramente la diferencia entre ellos. – Nawaz
Prefiere snprintf() a sprintf() para evitar los desbordamientos tontos de la memoria intermedia. –
Prefiere transmisiones o formateadores Boost para evitar desbordamientos tontos de búfer y desagradables errores tipo-inseguridad –