Escribí un programa para Linux usando libxml2 para el análisis html. Aunque hace su trabajo, el analizador html escribe muchos errores diferentes en stderr. ¿Es posible deshabilitar stderr en absoluto (o redirigirlo a/dev/null sin tener que ejecutarlo con un script de shell de redireccionamiento)? Puedo vivir teniendo que escribir mis propios errores en stdout, solo quiero deshacerme de estos errores.¿Es posible deshabilitar stderr en C++?
Respuesta
Uso nula freopen para redirigir a dev /:
freopen("/dev/null", "w", stderr);
Consulte la página del manual para la función pipe(2)
. Pase STDERR y un controlador a/dev/null, y debería funcionar.
equiv: NUL en las ventanas –
Puede redirigir stderr (en bash, de todos modos) desde la línea de comandos, tales como:
./myProgram 2>/dev/null
¿Qué es lo que específicamente no pidió. –
No tenía claro qué quería decir con un "guión de shell redirigido". – Ambuoroko
freopen()
ing stderr
ya se ha mencionado, que responde a su pregunta específica. Pero dado que está trabajando con libxml2, es posible que desee un control más detallado de los mensajes de error y no solo redirigir categóricamente todos los mensajes de stderr. Los mensajes de error están ahí por una razón, ya sabes. Consulte libxml2 documentation sobre cómo usar los manejadores de errores con libxml2. Un buen punto de partida es xmlSetGenericErrorFunc()
Gracias lo usaré en el futuro, pero necesito una solución rápida en este momento, así que freopen lo hará por ahora. –
freopen (3) es una solución orientada a C (no C++ como la pregunta), y es solo la suerte lo que hace que funcione. No está especificado para funcionar. Solo funciona porque cuando el descriptor de archivo 2 se cierra y se abre/dev/null, obtiene el descriptor de archivo 2. En un entorno de subprocesos múltiples, puede fallar. Tampoco puede garantizar que la implementación de freopen (3) primero cierre la transmisión dada antes de abrir el nuevo archivo. Todo esto supone que no se puede suponer que libxml2 usa st-di de estilo C.
solución A POSIX a esto es utilizar abierto (2) y dup2 (2):
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
...
/* error checking elided for brevity */
int fd = ::open("/dev/null", O_WRONLY);
::dup2(fd, 2);
::close(fd);
- 1. ¿Es posible deshabilitar Excepciones y RTTI en las bibliotecas Boost?
- 2. Cuándo usar $ stderr vs STDERR en Ruby?
- 3. ¿Es seguro deshabilitar el almacenamiento en búfer con stdout y stderr?
- 4. ¿Es posible deshabilitar jsessionid en el servlet de tomcat?
- 5. ¿Es posible deshabilitar temporalmente un índice en Postgres?
- 6. ¿Es posible atenuar (no solo deshabilitar) un MenuItem en Android?
- 7. ¿Es posible deshabilitar el desplazamiento en una lista Vista?
- 8. c popen no detectará stderr
- 9. Enviar JNI C stderr/stdout a log4j
- 10. ¿Es posible imprimir una variable de preprocesador en C?
- 11. ¿Es posible deshabilitar la opción multilínea de textarea?
- 12. Guardar stdout, stderr y stdout + stderr sincrónicamente
- 13. C# - ¿Es posible agrupar cajas?
- 14. WPF con C++, ¿es posible?
- 15. Compruebe si stderr es una tubería en bash
- 16. ¿Es posible "encadenar" EventHandlers en C#?
- 17. ¿Es posible anular un constructor en C#?
- 18. ¿Es posible generar tonos complejos en C#?
- 19. ¿Es posible programar el iPhone en C++
- 20. ¿es posible usar expresiones regulares en C++?
- 21. ¿Es posible implementar eventos en C++?
- 22. ¿Es posible extender matrices en C#?
- 23. ¿Es posible implementar mixins en C#?
- 24. ¿Es posible? GUI en C#, aplicación en C++
- 25. Duplicar stdout a stderr
- 26. ¿Cómo redirigir stderr en Python?
- 27. ¿Es posible imitar la interfaz Go en C/C++?
- 28. ¿No es posible la negación de -2147483648 en C/C++?
- 29. ¿Es posible desactivar metarefrescar en Google Chrome?
- 30. WCF - Deshabilitar la seguridad en nettcpbinding (C#)
¡Derrotame por 10 segundos! –