Безопасно ли вызывать fprintf () для обработчика сигнала? - PullRequest
0 голосов
/ 26 февраля 2019

В моей программе у меня есть что-то вроде

#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 () записать в файл?Согласно здесь я могу только позвонить написать

1 Ответ

0 голосов
/ 26 февраля 2019

fprintf является не безопасным для вызова в обработчике сигналов, отчасти из-за возможностей буферизации для FILE объектов.

Что вам следует do устанавливает глобальный флаг в обработчике сигналов, затем проверяет этот флаг в другом месте вашего кода и действует соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...