2012-08-08 34 views
2

我們應該在內部信號處理程序中使用perror,因爲它們具有類似printf和其他stdio函數的用戶空間緩衝區?我們是否應該在信號處理程序中使用perror

+1

'perror'在信號處理程序中調用並不安全。可以在這裏找到安全函數列表(http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html#tag_02_04)。 – 2012-08-08 09:06:38

回答

2

perror沒有在異步信號安全函數表(例如,section 2.4.3 Signal Actions)中列出,所以從響應中斷非異步信號的信號調用的信號處理程序調用並不安全 - 安全功能。

1

perror()不是異步信號安全的,當它在信號處理程序中調用時可能會破壞事件,但是如果發生錯誤,您可能必須調用它或其他一些日誌實用程序(也可能不是aysnc-信號安全)來報告錯誤。輸出日誌消息很可能不會混亂。即使它搞砸了,你也可以得到一些信息,總比沒有好。

您也可以編寫自己的重入安全日誌實用程序。 (re-entrancy ringbuffer,rare write()syscall)

相關問題