Datei änderungen



  • Hallo.

    Wie kann ich denn eine Datei durchgehend "überwachen" und, wenn neue Zeilen dazugekommen sind, in einen Puffer einlesen? Also so in etwa, wie wenn ich "tail -f /var/log/messages" mache, nur dass ich halt in dem Fall kein tail nehmen kann, weil ich diesen vorgang in einem c programm brauche.

    danke, Stefan.



  • Abend.

    Ein Beispiel habe ich leider nicht zur Hand, aber schau dir mal fcntl(2) an, darin sollte nab besonders F_NOTIFY beachten.
    Ergäzend: /usr/src/linux/Documentation/dnotify.txt



  • am besten geht das mit stat (siehe faq: tutorial dateien unter linux)
    du baust das in n thread / kindprozess ein, und kannst so rasend schnell ohne die datei irgendwie zu öffnen feststellen, ob sich gröse / datum etc geändert haben. schick mir ne mehl falls du den code brauchst, hab des schon mal geschrieben



  • Wie ich den status feststelle, ist schon klar. Nur müsste ich dann ja immer warten, bis die datei sich ändert, diese dann neu öffnen, bis zum ende durchlaufen und die neue Zeile verarbeiten.. Ist nur leider bei Dateien > 100MB nicht wirklich performant 😢
    Daher hab ich gedacht, kann man die geöffnet halten und immer wenn ne neue Zeile kommt, diese direkt in einen Pufer einlesen...

    stefan.



  • also den pointer an ne bestimmte stelle zu setzen, dürfte nicht so schwer sein. einfach das alte ende merken, bei ner änerung dann einfach an die stelle springen. sollte dann schon einigermassen performant sein.



  • Also ist es nicht möglich, die Datei offen zu halten, so dass ein vorhandener Puffer immer mit der aktuellsten zeile gefüllt wird?



  • will mich da jetz nicht (womögl. falsch) festlegen, aber wie soll das denn gehen? die methode die ich dir oben genannt hab scheint mir die plausibelste, die da auch ziemlich rankommt


Anmelden zum Antworten