Signalhandler



  • 😕 😕 😕 😕 😕 😕
    Das ist sehr unverstädnlich in meinem buch geschrieben kann mir einer
    genau erklären was sie sind und wozu man sie braucht?



  • Capt schrieb:

    [...] kann mir einer genau erklären was sie sind und wozu man sie braucht?

    Ja, sicher! Viele haben das sogar schon einmal aufgeschrieben. Wenn du die durch hast darfst du gerne mit einer konkreten Frage wider hier aufschlagen ...



  • Habe ich es richtig verstanden das ich für Signale eigenstädig nummern festlegen kann?



  • void sig_handler(int signo)
    {
      if (signo == SIGINT)
        printf("received SIGINT\n");
    }
    

    Bedeutet es das signo eigentlich den Makro des ersten Parameters (signal(<erster P>, <zweiter P>));
    repräsentiert?



  • Und bitte nicht das veraltete signal() benutzen, sondern das viel portablere sigaction().



  • Signale sind quasi Interrupts:
    Wenn ein Signal an einen Prozess gesendet wird, wird dieser unterbrochen und der Signalhandler wird ausgeführt.

    Der C Standard spezifiziert nur ein paar Signale und legt nicht fest wie genau Signale gehandhabt werden, wenn zB ein Signal behandelt wird während ein zweites kommt. Es wird noch nicht einmal gefordert, dass ein Programm überhaupt signale empfangen kann, nur die raise Funktion muss funktionieren.

    Wenn du auf Posix System Signale behandeln willst benutze besser sigaction, das ist portabler und bietet mehr Kontrolle.

    Vorsicht bei Signalhandlern, sie haben die gleichen Schwierigkeiten wie Interrupthandler.

    Capt schrieb:

    Habe ich es richtig verstanden das ich für Signale eigenstädig nummern festlegen kann?

    Nein die Nummern werden durch Makros zB SIGABRT festgelegt

    Capt schrieb:

    void sig_handler(int signo)
    {
      if (signo == SIGINT)
        printf("received SIGINT\n");
    }
    

    Vorsicht printf ist i.a. nicht reentrant.



  • Heißt es jetzt das es stimmt oder nicht? 😕


Anmelden zum Antworten