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
Descriptor schliessen mit einem Signal-Handler
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
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.
Ich mag die Schreie.