![]() |
C Signal Handler
Hallo Leute
Ich muss ein C Programm schreiben welches folge Aufgabenstellung erfüllt (Umgebung Unix(Free BSD)): Signal–Handling (Signale küunstlich erzeugen) Benutzen Sie Ihr Programm sigtest2 als Grundlage für ein Programm sigtest3, das mit einem erhöhten Parameter für sleep() arbeitet, um vier der in der Vorlesung angegebenen Signale zu simulieren. Hierbei bedeutet Simulieren nicht, dass mit Hilfe von kill oder kill() die jeweilige Signalnummer erzeugt wird. Vielmehr sollen beim Ablauf des Programms sigtest die Bedingungen erzeugt werden, die zum Senden des Signals führen, etwa dass ein Alarmtimer abläuft (siehe alarm(3)). Code von sigtest2.c Wollte folgende Signale produzieren:
Das auslösen der Signale ist in erster Linie nicht mein Problem, sondern ich kann das Signal SIGCHLD und das Signal SIGALRM ohne probleme auslösen. wenn ich nun noch das Signal SIGFPE oder SIGSEGV auslöse, bekomme ich eine Endlosschleife. Unterbreche ich diese mittels " signal(signo,SIG_IGN)" beendet sich mein programm. Hat von euch jemand eine idee was ich noch tun kann um alle 4 Signale hinter einander Abzufeuern ohne das sich das Programm beendet oder in eine Endlosschleife gerät? Schon mal danke im vorraus. Gruß Huugo |
Ich habe leider kein Linux zur Verfügung und somit fehlen mir leider einige Headerdateien, um das Projekt zu compilieren und zu testen.
Falls dir hier sonst niemand helfen kann, poste einfach mal dein den Quellcode von deinem Projekt und beschreibe mal, an welcher Stelle es sich ungefähr aufhängt. Ansonsten: schonmal mit einem Debugger überprüft? |
Ich würde mal auf folgendes Problem Tippen:
Nach dem du deinen Signalhandler aufgerufen hast, kommst du wieder an die Stelle im Code, die das Aufrufen des Signalhandlers verursacht hat. Da du dann aber wieder eine Division durch 0 durchführst, springt dein Programm wieder in den Signalhander. Eine einfache Lösung wäre im Signalhandler die Variablen so zu verändern, dass du nicht mehr durch 0 dividierst. In deinem Beispiel dann b>0. Alternativ könnte man noch mit setjmp/longjmp (in setjmp.h) arbeiten, die Division aber zu "korriegieren" wäre die einfachere Möglichkeit. Trotzdem mal den Code liefern ;) |
Zitat:
Kann ich hier nicht rauslesen; ich würde beim Programmstart Parameter mitübergeben, welcher Alarm gestestet werden soll, ein Switch und fertig. |
Danke germgerm auf die idee bin ich noch nich gekommen :T
Dachte es liegt an meinen bescheidenen C Kentinissen, da ich sonst fast nur Java programmiere. Hier noch der funktionierende Code für alle die es interessiert:D Code:
#include <signal.h> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.