¿Proporciona Linux un manejo de excepciones en C sin recurrir a C++? O bien, ¿cuál podría ser la mejor manera de implementar dicho manejo de excepciones? El objetivo es evitar comprobar los códigos de retorno para cada función llamada, pero hacer algo como C++ que es seguro para subprocesos y fácil de transportar.Manejo de excepciones en C sin C++ en Linux
Respuesta
nunca he oído hablar de Linux que proporciona nada por el estilo, pero esta página se describe el manejo de una biblioteca para C excepción de terceros: http://www.on-time.com/ddj0011.htm no he sido capaz de encontrar el enlace de descarga, sin embargo.
Gracias, mientras tanto tropecé con el mismo sitio, pero no pude encontrar el código fuente tampoco. – stefangachter
Aquí hay algunas consideraciones generales sobre el manejo de excpetion y comentarios sobre la implementación anterior: http://landheer-cieslak.com/wordpress/error-handling-in-c/ – stefangachter
Puede manejar las señales escribiendo sus manejadores de señal para ello. Algunas de estas señales documentadas en GNU son:
- Señales de error del programa: se utilizan para informar errores graves del programa.
- Señales de terminación: se usan para interrumpir y/o finalizar el programa.
- Señales de alarma: se utilizan para indicar la expiración de los temporizadores.
- Señales de E/S asíncronas: se utilizan para indicar que la entrada está disponible.
- Señales de control de trabajos: señales utilizadas para respaldar el control de trabajos.
- Señal de error de funcionamiento: se usa para informar errores del sistema operacional.
- Señales misceláneas: Señales misceláneas.
- mensajes de señal: Impresión de un mensaje que describe una señal
Puede obtener más información en profundidad sobre este here. Se afirma lo siguiente, que supongo que es lo que busca:
Si usted anticipa un evento que hace que las señales, se puede definir una función de controlador y decirle al sistema operativo para ejecutar cuando ese tipo particular de la señal llega.
Gracias por la pista. ¿Conoce algún código de ejemplo que use señales para el manejo de la expiación? – stefangachter
Hay códigos de muestra si lees el enlace en mi publicación. –
El kernel lo hace usando goto para saltar a las secciones de desmontaje.
ver aquí para los estándares de codificación: http://lxr.linux.no/linux+v2.6.34/Documentation/CodingStyle
Offtopic probablemente, pero no puedo resistirlo, lo siento.
Debo decir que el único mecanismo de excepciones realmente bueno y completo que he visto hasta ahora es el manejo de excepciones estructuradas de SEH en Windows.
Sopla el modelo de manejo de excepciones C++ (que levanta las manos cuando se lanza una excepción dentro del destructor de un objeto automático durante el desenrollado de la pila).
Además, se trata de un manejo de excepciones realmente uniforme, ya que combina las excepciones del software y las generadas por el hardware.
De modo que si desea manejar excepciones, escriba para Windows o implemente algo similar para Linux.
P.S.A diferencia de lo que mucha gente piensa, el manejo de excepciones es muy lejos más que simplemente interrumpir el flujo normal del programa usando jmp
.
También es una cadena de negociaciones sobre quién y cómo maneja la excepción. Es (lo más importante) - la correcta limpieza ejecución en cada ámbito, se trata de excepciones anidadas y etc
puedo sugerir que eche un vistazo a mi biblioteca exceptions4c? Ha sido probado en Linux y tiene muchas características, como bloques finally
, manejo de señal y un tipo de polimorfismo que le permite crear jerarquías de excepción. También es compatible con multi-threading.
- 1. manejo de excepciones en C#
- 2. Manejo de excepciones en linux
- 3. Manejo de excepciones en Obj-C
- 4. Manejo de excepciones generales en C#
- 5. C#: manejo de excepciones en llamada recursiva
- 6. C# ThreadPool QueueUserWorkItem Manejo de excepciones
- 7. C# manejo de excepciones caída A través
- 8. Sin fuerza de manejo de excepciones?
- 9. Manejo de excepciones de C++ personalizadas en Cython
- 10. Manejo de errores STL sin excepciones
- 11. Excepciones personalizadas en C++
- 12. Manejo de excepciones en hilos
- 13. excepciones entre bibliotecas compartidas en C++ g ++
- 14. Sobrecarga del manejo de excepciones en D
- 15. Excepciones dentro de excepciones en C++
- 16. manejo de excepciones ObjC en monotouch
- 17. Ignorar excepciones en C#
- 18. Conversión de excepciones de punto flotante en excepciones de C++
- 19. Gestión global de excepciones en C++
- 20. C# Eventos sin argumentos. ¿Cómo los manejo?
- 21. Manejo de señales en C
- 22. manejo de señales en C++
- 23. Python httplib2 Manejo de excepciones
- 24. En C#, ¿cómo sé qué excepciones tomar?
- 25. Manejo de múltiples excepciones
- 26. Excepciones non-stop en C#
- 27. Manejo de excepciones JSF2
- 28. manejo de excepciones ofstream
- 29. Wcf manejo de excepciones
- 30. Manejo de excepciones AOP
Los hombres reales usan setjmp()/longjmp(). –
Gracias, lo verificaremos. ¿Existe una ventaja/desventaja al utilizar setjmp/longjmp sobre las señales como se propone a continuación? – stefangachter