[C][Linux] frage zu signalhandler



  • Koennte mir mal bitte einer von euch die folgende funktion erklaeren sie ist aus dem buc Linux - Unix Programmierung von pronix.de ... ich versteh denn sinn der typedef nicht so ganz was hat der funktionszeiger fuer eine aufgabe?
    Und wieso wird der alte sa_handler zurueckgegeben?

    aufgerufen wird die funktion spaeter mit

    handle_signal(SIGHUP, SIG_IGN);
    

    ich hoffe einer von euch kann mich erleuchten 🙂

    typedef void (*sighandler_t)(int);
    
    static sighandler_t
    handle_signal (int sig_nr, sighandler_t signalhandler) {
       struct sigaction neu_sig, alt_sig;
    
       neu_sig.sa_handler = signalhandler;
       sigemptyset (&neu_sig.sa_mask);
       neu_sig.sa_flags = SA_RESTART;
       if (sigaction (sig_nr, &neu_sig, &alt_sig) < 0)
          return SIG_ERR;
       return alt_sig.sa_handler;
    }
    


  • 1. Parameter ist das Signal, auf das reagiert werden soll,
    2. Parameter, die Funktion die dann aufgerufen werden soll.

    Der typedef soll das Ganze nur lesbarer machen.



  • ja soweit war ich auch schon ... was fuer mich unklar ist SIG_IGN ist doch eine konstante und keine funktion und wieso wird der alte sa_handler zurueckgegeben?

    das mit dem typedef hat sich dann schonmal geklaert 🙂



  • TDO schrieb:

    ja soweit war ich auch schon ... was fuer mich unklar ist SIG_IGN ist doch eine konstante und keine funktion und wieso wird der alte sa_handler zurueckgegeben?

    das mit dem typedef hat sich dann schonmal geklaert 🙂

    man sigaction Da sollte alles drin stehen.


Anmelden zum Antworten