相关疑难解决方法(0)

确定函数是否是异步信号安全的(可以在信号处理程序中调用)

我的问题是:

  1. 如果您无法访问其实现,是否有办法确定函数是否是异步信号安全的?
  2. 如果没有,有没有办法测试函数是否异步信号安全足以从信号处理程序调用?

如果您读取signal()或sigaction()的手册页,您将获得一个异步信号安全函数列表(可以在信号处理程序中安全地调用的函数).但是,我认为这份清单并非详尽无遗.例如,Async-signal-safe函数头下的以下页面http://linux.die.net/man/7/signal读取:

POSIX.1-2004(也称为POSIX.1-2001技术勘误2)要求实现以保证在信号处理程序内可以安全地调用以下函数:

然后它继续列出上面手册页中列出的正常异步信号安全功能.当我读它时,它说"它需要",而不是"这些是唯一的".

例如,该站点说back_trace_symbols_fd()是异步信号安全的.该函数获取的是来自dladdr()的数据,并且它不像back_trace_symbols()那样使用malloc(),所以看起来它可能是安全的.此外,我做了一些测试,dladdr()的输出结构包含char*变量,但这些变量在运行时不是malloc.即使在调用dladdr()之前,它们指向的char字符串也存在于运行时.

任何可以指出我正确方向的想法或想法都会受到赞赏.

c posix signals objective-c

5
推荐指数
1
解决办法
1148
查看次数

标签 统计

c ×1

objective-c ×1

posix ×1

signals ×1