Descriptor schliessen mit einem Signal-Handler

Antworten
Nachricht
Autor
Benutzeravatar
columbus
Beiträge: 5
Registriert: 18. Jun 2006 18:03
Wohnort: Mainz

Descriptor schliessen mit einem Signal-Handler

#1 Beitrag von columbus » 18. Jun 2006 18:12

Hallo zusammen,
ich habe eine kurze prinzipielle Frage. Ich möchte einen Signal-Handler schreiben, der wenn er aufgrufen wird, alle Dateien, Sockets und was sonst noch so von seinem Prozess konsumiert wird schliesst. Dazu brauch er natürlich die Descriptoren, da aber einem Signal-Handler immer nur eine integer-Zahl übergeben werden kann, muß er sich die Descriptoren woanders holen. Vielleicht stehe ich auch auf dem Schlauch, aber muß ich hier wirklich mit globalen Variablen arbeiten? Ich meine ich kann natürlich auch Funktionen erstellen, die das schliessen übernehmen, aber die haben dann das gleiche Problem.

Gibt es da eine elegante Lösung?

Gruss Christian

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 19. Jun 2006 9:42

Die elegante Lösung sieht vor, dass man sich bei Dateien nicht darum kümmert -- das macht der Kernel automatisch.

Bei Sockets müssen die anderen Prozesse erkennen, dass ihr Partner abgebrochen wurde -- Es gibt da ein paar Signale (0 Byte gelesen, SIGPIPE), die man kontrollieren sollte.

Signalhandler für den Abbruchfall braucht man nur, wenn man noch irgendwas in der Datei unterbringen muss, um diese korrekt abzuschließen. Das ist aber nicht zu empfehlen, da es potentiell Fehler auslösen kann, die dann wieder einen Signalhandler aufrufen.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Antworten