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

问题描述 投票:2回答:1

在我的程序中,我有类似的东西

#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,我只能打电话给写

c printf signals system-calls
1个回答
4
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.