避免在异步信号处理函数中使用非异步信号安全函数
15.2 ID_sig_nonAsyncSafeCall
不处理共享数据也不会影响程序状态的函数,以及不会被信号中断的函数称为“异步信号安全”函数,在异步信号处理函数中只应使用这种函数。
示例:
#include <stdio.h>
#include <signal.h>
void handler(int signum) {
printf("...."); // Non-compliant
}
int main() {
signal(SIGINT, handler);
printf("....");
}
printf 不是异步信号安全函数,例中两个 printf 的输出结果可能会交织在一起,甚至会产生运行时错误。
相关
依据
ISO/IEC 9899:1999 7.14.1.1(5)-undefined
ISO/IEC 9899:2011 7.14.1.1(5)-undefined