我們應該在內部信號處理程序中使用perror
,因爲它們具有類似printf
和其他stdio函數的用戶空間緩衝區?我們是否應該在信號處理程序中使用perror
2
A
回答
2
perror
沒有在異步信號安全函數表(例如,section 2.4.3 Signal Actions)中列出,所以從響應中斷非異步信號的信號調用的信號處理程序調用並不安全 - 安全功能。
1
perror()
不是異步信號安全的,當它在信號處理程序中調用時可能會破壞事件,但是如果發生錯誤,您可能必須調用它或其他一些日誌實用程序(也可能不是aysnc-信號安全)來報告錯誤。輸出日誌消息很可能不會混亂。即使它搞砸了,你也可以得到一些信息,總比沒有好。
您也可以編寫自己的重入安全日誌實用程序。 (re-entrancy ringbuffer,rare write()syscall)
相關問題
- 1. 信號處理程序應該在django項目中生活?
- 2. 我們是否在Windows應用程序
- 3. 有沒有辦法測試我是否處於信號處理程序中?
- 4. 信號處理程序接受(* args),我該如何提供它們?
- 5. C++應用程序中的多個信號處理程序
- 6. 我是否應該在清理處理程序中解鎖互斥鎖?
- 7. 我們可以爲Linux用戶空間程序中的每個信號分配信號處理程序嗎?
- 8. SIGKILL信號處理程序
- 9. 讀信號處理程序
- 10. 我們是否應該在nTier應用程序中使用WCF服務作爲我們的服務層門面
- 11. 線程中的信號處理程序
- 12. jQuery是否應該只在ready事件處理程序中使用?
- 13. 我們是否應該在實用類中擁有一個靜態最終處理程序
- 14. 從驅動程序到應用程序的信號處理
- 15. 我們的程序中是否應該有後門?
- 16. 是否有可能在另一個進程中更改信號處理程序?
- 17. 檢查信號處理程序是否爲默認
- 18. 是否可以更改信號處理程序返回點?
- 19. 我是否應該使用線程來加速應用程序
- 20. 在信號處理程序中使用長數據。
- 21. 如何在信號處理程序中使用「sigaltstack」?
- 22. C++ 11在信號處理程序中使用條件變量
- 23. 在使用timer_create的單獨pthread中的信號處理程序
- 24. 使用sigaction在Linux中的信號處理程序(C++)
- 25. 啓用信號處理程序
- 26. pthread_exit()在信號處理程序
- 27. 信號處理 - 異步函數和多線程應用程序,信號棧
- 28. 我們是否應該始終在特質中使用`override`
- 29. 是否可以使用自定義的sigaction信號處理程序和pthread_sigmask?
- 30. SystemC模擬應用程序中的問題處理信號
'perror'在信號處理程序中調用並不安全。可以在這裏找到安全函數列表(http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html#tag_02_04)。 – 2012-08-08 09:06:38