Löchen eines Datei-Inhaltes
-
Hi
if((fd=open("serverinfo",O_WRONLY | O_TRUNC))<0) Fehler_Meld(FEHLER,"Fehler beim löschen des Inhaltes von \"serverinfo\""); close(fd)
Damit möchte ich den Dateiinhalt der Datei "serverinfo" löschen. Was natürlich nicht passiert. Weiß jemand wieso?
Zur Funktion "Fehler_Meld":
Gibt die Fehlermeldung an den Demon "syslog" weiter und entscheidet an der Priorität(FEHLER) das der Prozess beendet wird.könnt ihr mir helfen?
-
helft_mir schrieb:
Damit möchte ich den Dateiinhalt der Datei "serverinfo" löschen. Was natürlich nicht passiert.
bei mir passierts...
Wenn open() einen Fehler zurückgibt, mach perror() und du erhälst die Fehlermeldung in Klartext.
-
open() gibt aber keine Fehler zurück und perror() kann ich nicht nutzen da der Prozess ein Deamon ist.
-
Kann's sein, dass du nicht in dem Verzeichnis bist, in dem du glaubst zu sein?
-
Ich bin im richtigem Verzeichnis da ich ganz zum Anfang überprüfe ob das Programm schon läuft, indem ich nachsehe ob eine Prozess-ID in dieser Datei steht.
Wenn nicht startet das Programm und Schreibt die eigene Prozess-ID hinein.Beim beenden soll die Prozess-ID wieder gelöscht werden. Was ja nicht geht.
Und zwischendurch ändere ich das Verzeichnis nicht.
-
Ich hab den Fehler gefunden. Ich hab bei einer Beendigungsprozedur, in der ich sämtliche Kind-Prozesse beende, eine Schleifenkopf falsch definiert und somit ein durchlauf mehr gehabt. Das hat dazu geführt das bei dem Aufruf:
kill((*clients).pid,SIGUSR1);
in (*clients).pid eine 0 stand. Und das bedeutet das kill das Signal SIGUSR1 an allen Prozessen mit der selben Gruppen-ID wie der Aufrufprozess sendet. Und die Standart Reaktion von Linux auf SIGUSR1 ist die Beendigung des Prozesses.
Kurz gesagt das Programm ist gar nicht an dieser Codestelle angelangt.