8 Stimmen

Erkennen von Änderungen an einer geöffneten Datei

Angenommen, ich habe eine offene Datei. Wie kann ich erkennen, wenn die Datei von einem anderen Programm im Hintergrund geändert wird? Einige Texteditoren können erkennen und die geöffnete Datei aktualisieren, wenn sie von einem anderen Prozess geändert wird.

Ich bin speziell für diese mit C unter Linux fragen (dies scheint OS abhängig sein).

11voto

Doug Punkte 8420

Wenn Sie die Datei nicht mit stat und es Ihnen nichts ausmacht, Linux-spezifisch zu sein, dann können Sie die inotify-API verwenden. Ihr Kernel muss 2.6.13 oder neuer sein und glibc 2.4 oder neuer (was der Fall sein wird, wenn Sie etwas aus den letzten 2 oder 3 Jahren verwenden). Die API gibt Ihnen grundsätzlich einen Dateideskriptor, den Sie poll o select y read um Informationen über geänderte Dateien zu erhalten. Wenn Ihre Anwendung interaktiv ist, wie ein Editor, dann wird sie typischerweise eine Art Ereignisschleife haben, die select o poll und kann Ihren inotify-Dateideskriptor auf Ereignisse überwachen.

Die Verwendung von inotify ist im Allgemeinen vorzuziehen stat Denn Sie erhalten sofort eine Benachrichtigung und verschwenden keine Zeit und keine E/A-Abfragen auf der Festplatte, wenn sich die Datei nicht ändert. Der Nachteil ist, dass es möglicherweise nicht über NFS oder andere vernetzte Dateisysteme funktioniert und nicht portabel ist.

Diese Seite bei IBM Developerworks enthält einige Beispiele für C-Code, und die Manpage ist die maßgebliche Referenz.

5voto

Aif Punkte 10605

Verwenden. stat Funktion. Beispiel auf der Seite.

3voto

bobince Punkte 512550

Texteditoren, die ich unter Windows und Linux gesehen habe, haben es genauso gemacht: Sie prüfen nicht, ob sich die Datei tatsächlich geändert hat, sondern schauen nur auf die stat mtime der Datei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X