lordosiris
Mitglied
Guten Abend,
ich hab ein Programm geschrieben, welches auf der einen Seite einen Server miemt.
Dieser Server öffnet eine FIFO, nimmt dort etwas entgegen und bearbeitet das.
Ein dazu passendes Client Programm hab ich auch geschrieben, welches eben etwas in diese FIFO schickt.
Jetzt läuft der Server quasi endlos und wird nur durch CTRL+C terminiert. Wenn ich das aber so rabiat mache, bleibt der (?) FIFO bestehen und wenn man den Server neu aufruft/neu startet, meckert er zurecht, dass es den FIFO schon gibt und, da er ihn nicht erstellen kann, beendet er sich.
Ich hab mir also gedacht, CTRL+C einfach abzufangen.
Gesagt getan, hab ich ein einfaches signal(SIGINT,ctrlc_handler); eingebaut und mir die Funktion folgenderweise gebastelt:
Ist mein Gedankengang so falsch?
Immerhin, wenn ich nun terminiere, kommt nur: Speicherzugriffsfehler (Speicherabzug geschrieben), er beendet sich und der FIFO bleibt trotzdem bestehen.
Wo habe ich denn den Denkfehler?
ich hab ein Programm geschrieben, welches auf der einen Seite einen Server miemt.
Dieser Server öffnet eine FIFO, nimmt dort etwas entgegen und bearbeitet das.
Ein dazu passendes Client Programm hab ich auch geschrieben, welches eben etwas in diese FIFO schickt.
Jetzt läuft der Server quasi endlos und wird nur durch CTRL+C terminiert. Wenn ich das aber so rabiat mache, bleibt der (?) FIFO bestehen und wenn man den Server neu aufruft/neu startet, meckert er zurecht, dass es den FIFO schon gibt und, da er ihn nicht erstellen kann, beendet er sich.
Ich hab mir also gedacht, CTRL+C einfach abzufangen.
Gesagt getan, hab ich ein einfaches signal(SIGINT,ctrlc_handler); eingebaut und mir die Funktion folgenderweise gebastelt:
C:
void ctrlc_handler(int signal){
FILE *receive_fifo;
if (fclose(receive_fifo) == EOF){ perror("fclose"); exit(EXIT_FAILURE); }
if (unlink("printserver") == -1){ perror("flose");exit(EXIT_FAILURE); }
exit(0);
}
Ist mein Gedankengang so falsch?
Immerhin, wenn ich nun terminiere, kommt nur: Speicherzugriffsfehler (Speicherabzug geschrieben), er beendet sich und der FIFO bleibt trotzdem bestehen.
Wo habe ich denn den Denkfehler?