【发布时间】:2012-01-26 06:16:09
【问题描述】:
我的问题是:
- 如果您无权访问函数的实现,是否有办法最终确定函数是否是异步信号安全的?
- 如果不是,有没有办法测试函数是否足够异步信号安全以从信号处理程序调用?
如果您阅读 signal() 或 sigaction() 的手册页,您会得到一个异步信号安全函数列表(可以在信号处理程序中安全调用的函数)。但是,我相信这份清单并不详尽。例如,以下页面 http://linux.die.net/man/7/signal,在 Async-signal-safe functions 标题下,内容如下:
POSIX.1-2004(也称为 POSIX.1-2001 Technical Corrigendum 2)需要一个实现来保证可以在信号处理程序中安全地调用以下函数:
然后它继续列出上面手册页中列出的正常异步信号安全函数。当我读到它时,它说的是“它需要”,而不是“这些是唯一的”。
例如,this site 表示 back_trace_symbols_fd() 是异步信号安全的。该函数获取的是来自 dladdr() 的数据,它不像 back_trace_symbols() 那样使用 malloc(),所以看起来它可能是安全的。另外,我做了一些测试,dladdr() 的输出结构包含 char* 变量,但这些变量在运行时不是 malloc 的。它们指向的 char 字符串甚至在调用 dladdr() 之前就存在于运行时。
感谢任何可以为我指明正确方向的想法或想法。
【问题讨论】:
-
不要忘记为您的问题投票有用的答案,或者接受对您的每个问题最有用的答案。如果您不确定,请查看FAQ,尤其是How do I ask questions here?
标签: objective-c c posix signals