我们应该在信号处理程序中使用perror吗?

时间:2012-08-08 08:50:32

标签: c signals stdio signal-handling

我们应该在信号处理程序中使用perror因为它们有像printf这样的用户空间缓冲区和其他stdio函数吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

perror()不是异步信号安全的,它可能会在信号处理程序内部调用时破坏,但如果已经发生错误,您可能必须调用它或其他一些日志工具(也可能报告错误,而不是aysnc-signal-safe)。输出日志消息很可能不会被搞砸。即使它搞砸了,你也可以得到一些信息,它总比没有好。

您也可以编写自己的re-entrancy安全日志工具。 (re-entrancy ringbuffer,rare write()syscall)