我正在Linux上移植一个Windows程序。 我的程序使用Windows结构化exception处理(SEH)。 Linux不支持结构化的exception处理,但它提供了信号处理。 我们可以重写信号来开发类似SEH的范例。
一旦你能够过滤exception,Windows就提供了三种备选的执行控制stream程:
1)EXCEPTION_EXECUTE_HANDLER:执行处理程序2)EXCEPTION_CONTINUE_SEARCH:将exception转发到下一个块(如果不存在,则返回到OS)3)EXCEPTION_CONTINUE_EXECUTION:从发生中断的指令处继续exception。
我怎样才能在Linux中实现这个控制stream 。 在Linux中,一旦处理完信号,程序就会从被中断的地方开始执行。 如何开发continue_search和execute_handler范例?
提前致谢
有没有简单的方法来做你想在这里用C ++。 您的工具是标准的C ++异常机制和sigaction
。 一个sigaction
处理程序可以将控制权返回到它离开的地方。 它可以抛出,虽然有关这个安全性的争议。 有人会说,它必须设置一个原子变量并返回。 (问题在于编译器看不到抛出的可能性,所以不准备。)
如果你用C语言工作,你还可以使用其他复杂的选项,包括sigsetjmp
,或多或少地涉及类固醇,风险等等。
既然你没有指定一种语言,或者你想要处理什么样的特殊情况,提供一个更具体的配方是不现实的。