1

C を使用した UNIX プログラミングについて調べたときに、再入可能に失敗する関数はシグナル ハンドラー内では避ける必要があることを学びましたが、次のような場合:

int main(int argc, char** argv){
     ...
    fileFd=open(...) 
    signal(SIGUSR1, signalHandler)
    ...
}


void signalHandler(int signo){
    switch(signo){

    case SIGUSR1:
        myExit(EXIT_FAILURE);   
        break;

    default: 
        break;

    }
}

myExit の場所

void myExit(int ret){

    ...DO STUFF...
    close(fileFd);
    exit(ret);

}

そしてfileFdはグローバル変数であり、それがmyExitを再入不可にすることを正しく覚えていれば...しかし、それがプログラムの終了を引き起こしたとしても、シグナルハンドラーでそれを使用することはまだ問題ですか? ありがとう、それがばかげた質問であるならば、どんな助けでも感謝します。

4

3 に答える 3