在信号处理程序上调用 fprintf() 是否安全?

jam*_*mes 4 c printf signals system-calls

在我的程序中,我有这样的事情

#include "mylib.h"
void signalsHandler(int signum){
    switch(signum){
        case SIGUSR1:{
            //open file.txt with write(O_CREAT | O_APPEND)
            //call the function that use fprintf() and write on file.txt

        }
        default: {
            abort();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

主要是

struct sigaction s;
memset(&s,0,sizeof(s));
s.sa_handler=signalsHandler;
s.sa_flags=SA_RESTART;
sigaction(SIGUSR1,&s,NULL);
Run Code Online (Sandbox Code Playgroud)

在 mylib.h 上调用使用 fprintf() 写入文件的函数是否安全?根据这里我只能打电话写

dbu*_*ush 5

fprintf不是安全的信号处理函数调用,部分原因是由于在缓冲能力FILE的对象。

应该做的是在信号处理程序中设置一个全局标志,然后在代码中的其他地方检查该标志并采取相应的行动。