/*******************************************************************************/ /* ________________________________________ */ /* / WARNUNG: Das ist keine Vorlage, es \ */ /* | handelt sich hier nur um den Stand der | */ /* | Datei am Ende von der Übung. In diesem | */ /* | Programm könnten eine Vielzahl von | */ /* | Fehlern und Fallen verborgen liegen, | */ /* | welche man nicht in seiner Abgabe | */ /* \ übernehmen will! / */ /* ---------------------------------------- */ /* \ / \ //\ */ /* \ |\___/| / \// \\ */ /* /0 0 \__ / // | \ \ */ /* / / \/_/ // | \ \ */ /* @_^_@'/ \/_ // | \ \ */ /* //_^_/ \/_ // | \ \ */ /* ( //) | \/// | \ \ */ /* ( / /) _|_ / ) // | \ _\ */ /* ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. */ /* (( / / )) ,-{ _ `-.|.-~-. .~ `. */ /* (( // / )) '/\ / ~-. _ .-~ .-~^-. \ */ /* (( /// )) `. { } / \ \ */ /* (( / )) .----~-.\ \-' .~ \ `. \^-. */ /* ///.----..> \ _ -~ `. ^-` ^-_ */ /* ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ */ /* /.-~ */ /*******************************************************************************/ #include #include #include #include /* Ziel: Breche das Programm erst beim dritten ^C ab. */ void SIGINT_handler() { static int lives = 3; if (lives == 1) { write(STDOUT_FILENO, "ok\n", 3); exit(EXIT_SUCCESS); } else { write(STDOUT_FILENO, "no\n", 3); } lives--; } int main() { struct sigaction act = { /* .sa_handler = SIG_IGN, */ .sa_handler = SIGINT_handler, .sa_flags = SA_RESTART, }; sigfillset(&act.sa_mask); sigaction(SIGINT, &act, NULL); for (;;) pause(); /* warte passiv */ return 0; }