【问题标题】:Is it safe to call fprintf() on a signal handler?在信号处理程序上调用 fprintf() 是否安全?
【发布时间】: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

【问题讨论】:

标签: c printf signals system-calls


【解决方案1】:

fprintf 在信号处理程序中调用是安全的,部分原因在于 FILE 对象的缓冲能力。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多