Autor
|
Tema: Flujo stderr [Duda] (Leído 6,056 veces)
|
apoeti
Desconectado
Mensajes: 81
|
Hola. No entiendo muy bien cuál es la utilidad del flujo stderr, ya que hace (hasta lo que he podido ver) lo mismo que stdout. Os pongo este código para explicarme mejor: /* Demuestra la función remove(). */ #include <stdio.h> main() { char filename[80]; printf("Enter the filename to delete: "); printf("The file %s has been deleted.", filename ); else fprintf(stderr , "Error deleting the file %s.", filename ); }
Lo que quiero decir es que si no se podría poner en el else la función printf, pues sería lo mismo ¿Porqué se usa fprintf con el flujo stderr si a efectos prácticos va a ser lo mismo?
|
|
|
En línea
|
|
|
|
xiruko
Desconectado
Mensajes: 438
|
stderr es, como su nombre indica, la salida estandar de errores. este es util cuando por ejemplo, rediriges la salida de tu programa a un archivo. si en ese caso ocurre algun error en la ejecucion del programa y tienes puesta su salida por stderr, el error saldra en la terminal en vez de en el archivo. esto lo puedes probar con el mismo ejemplo que has puesto ejecutandolo desde terminal asi: ./main > prueba.txt y veras como la salida normal del programa la imprime en el archivo, y en cambio los errores los dice por la terminal.
no se si me explique muy bien... igualmente, no se mas aplicaciones a parte de redirigir siempre los errores a la terminal para que asi no se te impriman en un archivo o algo parecido.
un saludo!
|
|
« Última modificación: 31 Agosto 2012, 19:00 pm por xiruko »
|
En línea
|
|
|
|
apoeti
Desconectado
Mensajes: 81
|
Gracias por la respuesta, pero, ¿usando el flujo stdout no iría el error también a la terminal?
Saludos.
|
|
|
En línea
|
|
|
|
xiruko
Desconectado
Mensajes: 438
|
cuando ejecutas un programa hecho para la terminal, stdout y stderr (y stdin) significaran el mismo flujo, la terminal. pero si, por ejemplo, haces lo de redirigir la salida estandar del programa (stdout) a un archivo (con el operador > en la linea donde ejecutas el programa en la terminal) estaras cambiando stdout por el archivo, con lo que ahora tendras que:
stdout = archivo stderr y stdin = terminal
por lo que todos los errores que tengas con fprintf(stderr,...) los veras en la terminal, pero la salida normal del programa, las que has hecho con printf(), las tendras en el archivo.
no se explicarme mejor... a ver si alguien mas dice algo.
un saludo!
edito: solo quiero añadir algo mas acerca de los flujos y quizas asi lo entiendes mejor. igual que puedes cambiar stdout por un archivo, tambien puedes cambiar stdin por uno. estos flujos no son mas que entradas y salidas predefinidas para tu programa, pero tu puedes cambiarlas cuando quieras para que asi las 3 no sean el mismo flujo (por defecto la terminal). para cambiar la entrada en este caso, y para el programa que has colgado al principio, podrias hacer un archivo de texto llamado "prueba.txt" y añadirle esta linea "./prueba.txt". ahora ejecutalo desde la terminal asi: ./main < prueba.txt (en este caso, el operador es < y no >). con esto estaras cambiando stdin, que pasara de recibir la entrada por la terminal a recibirla por el archivo. si todo va bien, deberia borrarse el archivo "prueba.txt".
|
|
« Última modificación: 31 Agosto 2012, 19:13 pm por xiruko »
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
A parte de lo ya dicho por xiruko te añado esto sacado de la página --> http://www.cplusplus.com/reference/clibrary/cstdio/stderr/Cito lo que dice: Although generally both stdout and stderr are associated with the same console output, applications may differentiate between what is sent to stdout and what to stderr for the case that one of them is redirected. For example, it is frequent to redirect the regular output of a console program (stdout) to a file while expecting the error messages to keep appearing in the console screen. Traducido(no se si está bien , es medio google medio cosecha propia): Aunque generalmente stdout y stderr son asociados con la misma consola de salida , las aplicaciones pueden diferenciar entre lo que se envía a stdout y stderr en el caso de que una de ellas fuese redirigida. Por ejemplo, es frecuente redireccionar la salida regular de un programa de consola(stdout) a un archivo mientras los mensajes de error siguen apareciendo en la consola.
|
|
« Última modificación: 31 Agosto 2012, 20:52 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
apoeti
Desconectado
Mensajes: 81
|
Gracias a los dos por vuestras respuestas. Ahora lo entiendo perfectamente.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
algoritmos y diagramas de flujo
Programación C/C++
|
mapers
|
5
|
4,314
|
17 Agosto 2010, 23:17 pm
por mapers
|
|
|
flujo de datos, C++
Programación C/C++
|
darkvidhack
|
3
|
4,434
|
6 Febrero 2011, 11:18 am
por satu
|
|
|
Diagrama de Flujo (duda)
Programación C/C++
|
Raastah
|
4
|
9,483
|
20 Abril 2011, 07:13 am
por <<<-Basura->>>
|
|
|
Duda con diagrama de flujo
ASM
|
.:UND3R:.
|
2
|
4,078
|
5 Enero 2012, 10:46 am
por .:UND3R:.
|
|
|
Grafo de flujo duda
Programación General
|
splendid37
|
4
|
3,263
|
22 Abril 2018, 13:40 pm
por splendid37
|
|