【发布时间】:2019-07-20 02:25:00
【问题描述】:
在我的程序中我有这样的东西
#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
【问题讨论】:
-
不,不安全。
-
文档很清楚,如果
foo不是异步信号安全的列表,那么从信号处理程序调用foo是不安全的。但是,如果您这样做,您的程序仍然可能在某些条件下似乎可以正常工作。不要这样做。 -
Per the C standard: "因此,信号处理程序通常不能调用标准库函数。" POSIX 保证您可以调用 一些/几个 函数。
标签: c printf signals system-calls