在信号处理程序上调用 fprintf() 是否安全?
Is it safe to call fprintf() on a signal handler?
在我的程序中我有这样的东西
#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();
}
}
}
主要是
struct sigaction s;
memset(&s,0,sizeof(s));
s.sa_handler=signalsHandler;
s.sa_flags=SA_RESTART;
sigaction(SIGUSR1,&s,NULL);
调用 mylib.h 上使用 fprintf() 写入文件的函数是否安全?根据here我只能调用write
fprintf
在信号处理程序中调用 不 安全,部分原因是 FILE
对象的缓冲能力。
您应该做的是在信号处理程序中设置一个全局标志,然后在代码的其他地方检查该标志并采取相应的行动。
在我的程序中我有这样的东西
#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();
}
}
}
主要是
struct sigaction s;
memset(&s,0,sizeof(s));
s.sa_handler=signalsHandler;
s.sa_flags=SA_RESTART;
sigaction(SIGUSR1,&s,NULL);
调用 mylib.h 上使用 fprintf() 写入文件的函数是否安全?根据here我只能调用write
fprintf
在信号处理程序中调用 不 安全,部分原因是 FILE
对象的缓冲能力。
您应该做的是在信号处理程序中设置一个全局标志,然后在代码的其他地方检查该标志并采取相应的行动。