[Gelöst] fopen soll symlinks nicht folgen, wie? (Logging)



  • Hi

    ich habe ein Programm dass über eine symbolischen Link in eine Datei loggt. Geöffnet wird die Datei über ein

    fopen(name_des_symlinks, "w+");
    

    Nun werden die Logfiles manchmal sehr groß und deswegen wollte ich über einen cronjob den symlink regelmässig auf eine andere datei zeigen lassen. Das geht auch, aber das Programm loggt trotzdem weiterhin in die Datei, auf die der symlink zeigte als fopen ausgeführt wurde.

    Kann man fopen irgendwie sagen dass symlinks nicht gefolgt werden soll? (Habe auf http://www.cplusplus.com/reference/clibrary/cstdio/fopen.html gesucht, aber nichts gefunden)
    Wie macht man sowas normalerweise?

    Grüße
    Juri

    :schland:



  • Wenn fopen Symlinks nicht folgen würde, wie würdest Du dann jemals Dein Logfile geöffnet bekommen? Du möchtest doch, dass fopen die Datei hinter dem Symlink öffnet, also "dem Symlink folgt".

    Davon abgesehen hat der Dateiname nach dem Öffnen überhaupt keine Bedeutung mehr. Du hast eine geöffnete Datei, mehr nicht. Wenn sich der Name dieser Datei ändert, bleibt die Datei doch dieselbe, und das hat mit Symlinks nichts zu tun.

    Sprich, die Lösung für Dein Problem ist, die alte Datei zu schließen und die neue zu öffnen.



  • Hm, da hast Du natürlich recht.
    Ich hatte gedacht, ich könnte irgendwie von aussen das Logfile umbiegen um keine Änderungen an dem C/C++ Code machen zu müssen.

    Danke für die Antwort.

    Juri

    :schland:



  • Falls es jemanden interessiert, habe es jetzt mit einer named pipe (mkfifo) gemacht.

    Gruß
    Juri


Anmelden zum Antworten