Angenommen, ich habe eine offene Datei. Wie kann ich feststellen, wenn die Datei von einem anderen Programm im Hintergrund geändert wird. Einige Texteditoren können die geöffnete Datei erkennen und aktualisieren, wenn sie von einem anderen Prozess geändert wird.
Ich frage speziell dafür mit C unter Linux (das scheint OS-abhängig zu sein).
Wenn Sie die Datei nicht mit stat
abfragen möchten und Linux-spezifisch ist, können Sie die inotify-API verwenden. Ihr Kernel muss 2.6.13 oder neuer und glibc 2.4 oder neuer sein (das sind sie, wenn Sie etwas aus den letzten 2 oder 3 Jahren anvisieren). Die API gibt Ihnen im Grunde einen Dateideskriptor, mit dem Sie poll
oder select
und read
erhalten können, um Informationen über modifizierte Dateien zu erhalten. Wenn Ihre Anwendung wie ein Editor interaktiv ist, wird normalerweise eine Art Ereignisschleife verwendet, die select
oder poll
aufruft und Ihren Inotify-Dateideskriptor für Ereignisse beobachten kann.
Die Verwendung von inotify ist im Allgemeinen stat
vorzuziehen, da Sie sofort Benachrichtigungen erhalten und keine Zeit und Festplatten-E / A-Abfragen verschwenden, wenn sich die Datei nicht ändert. Der Nachteil ist, dass es möglicherweise nicht über NFS oder andere vernetzte Dateisysteme funktioniert und nicht tragbar ist.
Diese Seite bei IBM Developerworks enthält einen Beispielcode für C und < Eine href="http://linux.die.net/man/7/notify"> man-Seite ist die definitive Referenz.
Texteditoren, die ich unter Windows und Linux gesehen habe, haben es auf die gleiche Weise gemacht: Sie prüfen nicht, ob sich die Datei tatsächlich geändert hat, sie sehen sich nur die Dateizeit an.
Angenommen, ich habe eine offene Datei. Wie kann ich feststellen, wenn die Datei von einem anderen Programm im Hintergrund geändert wird. Einige Texteditoren können die geöffnete Datei erkennen und aktualisieren, wenn sie von einem anderen Prozess geändert wird.
Ich frage speziell dafür mit C unter Linux (das scheint OS-abhängig zu sein).
Verwenden Sie die Funktion stat . Beispiel auf der Seite.
Wenn Sie die Datei nicht mit %code% abfragen möchten und Linux-spezifisch ist, können Sie die inotify-API verwenden. Ihr Kernel muss 2.6.13 oder neuer und glibc 2.4 oder neuer sein (das sind sie, wenn Sie etwas aus den letzten 2 oder 3 Jahren anvisieren). Die API gibt Ihnen im Grunde einen Dateideskriptor, mit dem Sie %code% oder %code% und %code% erhalten können, um Informationen über modifizierte Dateien zu erhalten. Wenn Ihre Anwendung wie ein Editor interaktiv ist, wird normalerweise eine Art Ereignisschleife verwendet, die %code% oder %code% aufruft und Ihren Inotify-Dateideskriptor für Ereignisse beobachten kann.
Die Verwendung von inotify ist im Allgemeinen %code% vorzuziehen, da Sie sofort Benachrichtigungen erhalten und keine Zeit und Festplatten-E / A-Abfragen verschwenden, wenn sich die Datei nicht ändert. Der Nachteil ist, dass es möglicherweise nicht über NFS oder andere vernetzte Dateisysteme funktioniert und nicht tragbar ist.
Diese Seite bei IBM Developerworks enthält einen Beispielcode für C und < Eine href="http://linux.die.net/man/7/notify"> man-Seite ist die definitive Referenz.