【问题标题】:How to know if sigsetjmp or siglongjmp fail?如何知道 sigsetjmp 或 siglongjmp 是否失败?
【发布时间】:2023-03-14 17:34:01
【问题描述】:

这些函数的返回值并不意味着它们是否成功。有办法知道吗?

【问题讨论】:

  • 标签有点奇怪——它们不是系统调用,你通常不能在 C++ 中使用这些函数。
  • 真的很好奇,你要防范什么样的失败,你是如何在C++中使用这些的?

标签: c++ system-calls


【解决方案1】:

sigsetjmp 不会失败 - 它只是将调用者的上下文存储到提供的缓冲区中。

siglongjmp 不返回,因此无法通过返回值指示失败。调用前必须确保缓冲区有效。

在 C++ 中,您通常不能使用这些函数;如果在调用堆栈上与对 setjmp 的匹配调用之间存在任何具有非平凡析构函数的自动对象,则调用 longjmp 会给出未定义的行为。

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2011-08-22
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多