【问题标题】:What is the case where SIG_ERR of Linux signal function can occur?Linux信号函数的SIG_ERR在什么情况下会出现?
【发布时间】:2020-09-06 23:43:18
【问题描述】:

想知道信号函数的返回值中SIG_ERR是哪一种情况。

__sighandler_t oldHandler = signal( SIGSEGV, newSignalHandler );
if( oldHandler == SIG_ERR )
{
    // In what case?
}

【问题讨论】:

    标签: c++ c linux


    【解决方案1】:

    每个系统调用的手册页都应该在“错误”标题下列出所有可能的错误情况,以及在每种情况下设置errno 的相应值。

    man page for signal(2) 仅显示:

    EINVAL signum 无效。

    如果 signum(第一个参数)不是有效信号的编号,或者是无法捕获或忽略的 SIGKILLSIGSTOP,则会发生这种情况。

    因此,如果您已将SIGSEGV 作为第一个参数传递,signal() 将永远不会失败。

    (我最初认为如果 handler 是无效指针,它也可能失败,但在这种情况下,它似乎只是将无效指针安装为处理程序,因此会出现段错误或其他行为不端信号实际上被提高了。)

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2012-04-23
      • 2021-08-06
      • 1970-01-01
      相关资源
      最近更新 更多