我的問題是:確定一個功能是異步信號安全的(可以稱爲信號處理器中)
- 有沒有辦法最終確定的函數是異步信號安全的,如果你沒有獲得其實施?
- 如果不是,有沒有一種方法可以測試函數是否足夠支持異步信號以從信號處理程序調用?
如果您讀取signal()或sigaction()的手冊頁,會得到一個異步信號安全函數列表(可在信號處理函數內安全調用的函數)。不過,我認爲這份清單並不詳盡。例如,在下頁http://linux.die.net/man/7/signal,所述異步信號安全功能標題下,顯示如下:
POSIX.1-2004(也稱爲POSIX.1-2001技術勘誤2)需要一個實施保證可以在信號處理程序內安全地調用以下功能:
然後它繼續列出上面手冊頁中列出的常規異步信號安全功能。當我讀到它時,它說「它需要」,而不是「這些是唯一的」。
例如,this site表示back_trace_symbols_fd()是異步信號安全的。該函數獲取的是來自dladdr()的數據,並且它不像使用back_trace_symbols()那樣使用malloc(),所以它看起來可能是安全的。另外,我做了一些測試,並且dladdr()的輸出結構包含char *變量,但是這些變量在運行時不是malloc。它們指向的char字符串在運行時即使在調用dladdr()之前也存在。
任何想法或想法,可以指向我在正確的方向表示讚賞。
不要忘記對你的問題投票有用的答案,或接受對你的每個問題最有用的答案。如果您不確定,請查看[常見問題](http://stackoverflow.com/faq),特別是[如何在此處提問?](http://stackoverflow.com/faq#howtoask) –