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. 😞


Anmelden zum Antworten