elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Flujo stderr [Duda]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Flujo stderr [Duda]  (Leído 6,056 veces)
apoeti

Desconectado Desconectado

Mensajes: 81



Ver Perfil
Flujo stderr [Duda]
« en: 31 Agosto 2012, 18:32 pm »

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:
Código
  1. /* Demuestra la función remove(). */
  2.  
  3. #include <stdio.h>
  4.  
  5. main()
  6. {
  7.      char filename[80];
  8.  
  9.      printf("Enter the filename to delete: ");
  10.      gets(filename);
  11.  
  12.      if(remove(filename) == 0)
  13.          printf("The file %s has been deleted.", filename);
  14.      else
  15.          fprintf(stderr, "Error deleting the file %s.", filename);
  16. }

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 Desconectado

Mensajes: 438


Ver Perfil
Re: Flujo stderr [Duda]
« Respuesta #1 en: 31 Agosto 2012, 18:55 pm »

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 Desconectado

Mensajes: 81



Ver Perfil
Re: Flujo stderr [Duda]
« Respuesta #2 en: 31 Agosto 2012, 19:02 pm »

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 Desconectado

Mensajes: 438


Ver Perfil
Re: Flujo stderr [Duda]
« Respuesta #3 en: 31 Agosto 2012, 19:06 pm »

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 Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Flujo stderr [Duda]
« Respuesta #4 en: 31 Agosto 2012, 20:49 pm »

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:
Citar
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):
Citar
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 Desconectado

Mensajes: 81



Ver Perfil
Re: Flujo stderr [Duda]
« Respuesta #5 en: 3 Septiembre 2012, 20:18 pm »

Gracias a los dos por vuestras respuestas. Ahora lo entiendo perfectamente.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
algoritmos y diagramas de flujo
Programación C/C++
mapers 5 4,314 Último mensaje 17 Agosto 2010, 23:17 pm
por mapers
flujo de datos, C++
Programación C/C++
darkvidhack 3 4,434 Último mensaje 6 Febrero 2011, 11:18 am
por satu
Diagrama de Flujo (duda)
Programación C/C++
Raastah 4 9,483 Último mensaje 20 Abril 2011, 07:13 am
por <<<-Basura->>>
Duda con diagrama de flujo
ASM
.:UND3R:. 2 4,078 Último mensaje 5 Enero 2012, 10:46 am
por .:UND3R:.
Grafo de flujo duda
Programación General
splendid37 4 3,263 Último mensaje 22 Abril 2018, 13:40 pm
por splendid37
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines