4

我们应该使用perror内部信号处理程序,因为它们具有用户空间缓冲区printf和其他 stdio 函数吗?

4

2 回答 2

4

perror未在异步信号安全函数表中列出(例如,第 2.4.3 节 Signal Actions),因此从可能响应中断非异步信号的信号调用的信号处理程序调用是不安全的-安全功能。

于 2012-08-08T09:10:06.457 回答
2

perror()不是异步信号安全的,在信号处理程序中调用它可能会破坏事情,但如果已经发生错误,您可能必须调用它或其他一些日志工具(也可能不是 aysnc 信号安全)报告错误。输出日志消息很可能没有被弄乱。就算搞砸了,也能得到一些信息,聊胜于无。

您还可以编写自己的可重入安全日志工具。(重入环形缓冲区,罕见的 write() 系统调用)

于 2012-08-08T09:42:06.123 回答