为什么不鼓励在信号处理程序中调用标准库函数?
答案 0 :(得分:11)
GNU LibC documentation中解释了这一点。
如果在处理程序中调用某个函数,请确保它在信号方面是可重入的,否则请确保该信号不会中断对相关函数的调用。
以防万一,这里是可重入函数的Wikipedia page。
如果计算机程序或例程在之前的调用完成之前可以安全地再次调用(即可以同时安全地执行),则它被描述为可重入的。
答案 1 :(得分:1)
它不仅是重入问题,取决于作为服务的信号,您还希望避免无意中调用malloc()(即asprintf())和其他可变扩展(即printf())。
答案 2 :(得分:1)
这一切都运行正常,直到你遇到一些完全无法追踪的神秘错误:)
man 7 signal
将为您提供一个系统调用列表,可以安全地从信号处理程序调用。它也在POSIX中描述。
答案 3 :(得分:0)
因为库函数可能不可重入。