Descriptor schliessen mit einem Signal-Handler

Post Reply
Message
Author
User avatar
columbus
Posts: 5
Joined: 18. Jun 2006 18:03
Location: Mainz

Descriptor schliessen mit einem Signal-Handler

#1 Post by columbus »

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

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

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.

Post Reply