LINUX / glibc的。我可以在信号处理程序中使用fprintf吗?

时间:2010-12-29 12:36:03

标签: linux signals handler glibc

我可以在glibc / linux的信号(SIGALRM)处理程序中使用fprintf(stderr)吗?

2 个答案:

答案 0 :(得分:6)

不,你不能。检查联机帮助页signal(7)以获取异步信号安全功能列表。 fprintf未包含在该列表中。

如果您不需要格式化,则可以使用write(STDERR_FILENO, <buf>, <buflen>)写入stderr。

答案 1 :(得分:4)

这不安全,引用了IBM DeveloperWorks关于Signal Handling Safety

的文章
  

假设信号处理程序使用fprintf打印一条消息,并且当信号传递时,程序正在使用相同的流进行fprintf调用。信号处理程序的消息和程序的数据都可能被破坏,因为两个调用都在相同的数据结构上运行:流本身。