inotifizieren

inotify ist ein Linux-Kernel- Mechanismus , der Dateisystembenachrichtigungen bereitstellt.

Es wurde von John McCutchan mit Hilfe von Robert M. Love  (in) und später von Amy Griffis geschrieben , um dnotify zu ersetzen . Es wurde in den Hauptzweig des Linux-Kernels ab Version 2.6.13 aufgenommen (18. Juni 2005) und konnte dank der Verwendung von Patch bereits in 2.6.12 und möglicherweise noch früher kompiliert werden. Es handelt sich im Wesentlichen um eine Dateisystemerweiterung, die einer Anwendung über Änderungen im Dateisystem Bericht erstattet.

Es ist in Dateiindizierungssystemen wie Beagle zu finden , wo seine Funktionalität die Neuindizierung geänderter Dateien ermöglicht, ohne dass das gesamte Dateisystem in regelmäßigen Abständen überprüft werden muss, was sehr gut und ineffektiv wäre. Durch die Warnung, dass eine Datei direkt vom Kernel geändert wurde, anstatt sie beobachten zu müssen ( aktives Warten ), können Beagle und ähnliche Software sehr schnell neu indizieren, ohne die Systemleistung zu beeinträchtigen (inotify ermöglicht daher die Verwendung einer solchen Datei ) Programme, ohne dass dies unvernünftig ist).

Es kann auch verwendet werden, um "Ansichten" eines Verzeichnisses automatisch zu aktualisieren, Konfigurationsdateien neu zu laden usw.

Leistungen

Inotify hat viele Vorteile gegenüber dnotify, dem Modul, das es ersetzt. Mit dem alten Modul musste ein Programm für jedes Verzeichnis, das es überwachen wollte, einen Dateideskriptor verwenden . Dies kann zu einem Engpass werden, da die maximale Anzahl von Dateideskriptoren für einen Prozess erreicht werden kann.

Es wurde auch festgestellt, dass die Verwendung von Dateideskriptoren in dnotify ein Problem bei der Verwendung von Wechseldatenträgern darstellt. Die Geräte konnten nicht abgemeldet werden, da immer noch Dateideskriptoren auf sie zeigten.

Operation

Inotify wird über eine Reihe von Systemaufrufen verwendet, die speziell für Inotify erstellt wurden.

#include <sys/inotify.h>

Fügen Sie diesen Dateikopf ein, um inotify zu verwenden.

int inotify_init(void)

Dadurch wird eine Instanz von inotify erstellt. inotify_init gibt einen Dateideskriptor zurück, mit dem alle Ereignisse gelesen werden. Verwenden Sie den Aufruf read (), um die Ereignisse zu empfangen. Um ein aktives Warten zu vermeiden, blockiert read (), bis etwas passiert.

int inotify_add_watch(int fd, const char* chemin, int masque)

Startet die Überwachung des Inodes, auf den der Pfad für die in der Maske enthaltenen Ereignisse zeigt. Gibt einen Überwachungsdeskriptor zurück , der (innerhalb dieser inotify-Instanz) auf dem Inode, auf den der Pfad zeigt, eindeutig ist. HINWEIS: Mehrere Pfade können auf denselben Überwachungs-Inode / Deskriptor verweisen.

int inotify_rm_watch(int fd, int wd)

Entfernt die Überwachung von dem vom Überwachungsdeskriptor wd angegebenen Objekt .

Die von inotify generierten Ereignisse enthalten die folgenden Informationen:

Attribut Inhalt
wd Überwachungsdeskriptor
Maske Veranstaltung.
Plätzchen Wird ausschließlich beim Umbenennen verwendet. Das Umbenennen eines Dateisystemobjekts generiert zwei Ereignisse, "umbenannt von" IN_MOVED_FROM und "umbenannt in" IN_MOVED_TO . Dieser beliebige Wert ist für ein bestimmtes Objekt gleich und ermöglicht es der Anwendung, die Verknüpfung zwischen den beiden Ereignissen herzustellen, die dasselbe Objekt betreffen.
len Länge des Namens Attribut
Name der diesem Ereignis zugeordnete Dateiname (optional) (lokal im übergeordneten Verzeichnis)

Hier sind einige der Ereignisse, die überwacht werden können:

  • IN_ACCESS - Datei lesen
  • IN_MODIFY - letzte Änderung
  • IN_ATTRIB - Dateiattribute ändern
  • IN_OPEN und IN_CLOSE - Öffnen und Schließen der Datei
  • IN_MOVED_FROM und IN_MOVED_TO - Verschieben oder Umbenennen der Datei
  • IN_DELETE - Löscht eine Datei / ein Verzeichnis
  • IN_CREATE - Erstellt eine Datei im überwachten Verzeichnis
  • IN_DELETE_SELF - Löscht die überwachte Datei

Quellen