In diesem Artikel wird angezeigt, wie inotify zur Verfolgung der Erstellung, Löschung oder Änderung von Dateien und Verzeichnissen des Linux -Dateisystems verwendet wird.
Befolgen Sie die folgenden Schritte, um eine bestimmte Datei oder ein bestimmtes Verzeichnis mithilfe von Inotify zu überwachen:
Jetzt werden wir die Funktionen sehen, die zur Inotify -API verwendet werden.
Header-Datei: sys/inotify.H
Inotify_init () Funktion:
Syntax: int Inotify_init (void)
Argumente: Keine Argumente.
Rückgabewerte: Bei Erfolg gibt die Funktion einen neuen Dateideskriptor zurück, für den Fehler gibt die Funktion -1 zurück.
inotify_add_watch () Funktion:
Syntax: int inotify_add_watch (int fd, const char *pathname, uint32_t mask)
Argumente:
Diese Funktion erfordert drei Argumente.
Die 1st Argument (FD) ist ein Dateideskriptor, der sich auf die Inotify -Instanz bezieht (Rückgabewert von Inotify_init () Funktion) .
Die 2nd Das Argument ist Pfad des Verzeichnisses oder der Datei, die überwacht wird.
Der 3Rd Argument ist eine Bitmaske. Die Bitmaske repräsentiert die Ereignisse, die beobachtet werden. Wir können ein oder mehrere Ereignisse mit bitweise oder or ansehen.
Rückgabewerte: Bei Erfolg gibt die Funktion einen Watch -Deskriptor zurück, zum Fehler gibt die Funktion -1 zurück.
inotify_rm_watch () Funktion:
Syntax: int inotify_rm_watch (int fd, int32_t wd)
Argumente:
Diese Funktion nimmt zwei Argumente an.
Die 1st Argument (FD) ist ein Dateideskriptor, der sich auf die Inotify -Instanz bezieht (Rückgabewert von Inotify_init () Funktion) .
Die 2nd Argument (WD) ist ein Watch -Deskriptor (Rückgabewert von inotify_add_watch () Funktion) .
Rückgabewerte: Bei Erfolg kehrt die Funktion 0 zurück, für den Fehler kehrt die Funktion -1 zurück.
Wir gebrauchen lesen() Funktion (deklariert in Unistd.H Header Datei) zum Lesen des Puffer inotify_event Struktur. Der inotify_event Die Struktur wird in deklariert sys/inotify.H Header-Datei:
struct inotify_eventDer inotify_event Die Struktur stellt ein vom Inotify -System zurückgegebener Dateisystemereignis dar und enthält die folgenden Mitglieder:
Im Folgenden finden Sie ein funktionierendes Beispiel: Verwenden der Inotify -API:
Inotifizieren.c Datei:
#enthaltenAusgang:
Um das Programm auszuführen und die Ausgabe zu sehen, müssen wir zunächst zwei Terminals öffnen. Ein Terminal wird verwendet, um das Programm auszuführen Inotifizieren.C. Im zweiten Terminal gehen wir auf den Weg, der vom Inotify beobachtet wird.C. Wenn wir ein Verzeichnis oder eine Datei erstellen, eine Datei ändern oder ein Verzeichnis oder eine Datei löschen, werden diese auf dem ersten Terminal angezeigt.
Im Inotifizieren.C Beispiel die Unistd.H Die Header -Datei wird für die verwendet lesen() Und schließen() Funktion, die stdlib.H Die Header -Datei wird für die verwendet Ausfahrt() Funktion, die Signal.H Die Header -Datei wird für die verwendet Signal() Funktion und die Sig_int Makro (siehe Signalhandhabung für Details) und die fcntl.H Die Header -Datei wird für die verwendet fcntl () Funktion.
Wir erklären fd (Inotify -Instanz) und wd (Deskriptor ansehen) als globale Variablen, damit diese Variablen aus allen Funktionen zugänglich sind.
Der fcntl () Funktion wird so verwendet, dass beim Lesen der Verwendung der fd Deskriptor, der Thread wird nicht blockiert.
Als nächstes fügen wir eine Uhr mit dem hinzu inotify_add_watch () Funktion. Hier passieren wir FD, den Weg des Verzeichnisses, der beobachtet wird, und die Maske. Sie können die Maske der Ereignisse übergeben, die Sie mit Bitwise-OR überwachen möchten.
Lesen Sie nun den Puffer. Informationen zu einem oder mehreren Ereignissen werden im Puffer gespeichert. Sie können alle Ereignisse einzeln mit der Schleife verarbeiten. Sie können die Ereignis-> Maske überprüfen, um zu wissen, welche Art von Ereignissen stattgefunden haben.
Wir verwenden ein unendliches während der Schleife, um kontinuierlich zu überprüfen, wann Ereignisse aufgetreten sind. Wenn keine Ereignisse passiert sind, kehrt die Funktion read () mit einer 0 zurück. Der Rückgabewert der Funktion read () wird in der Längenvariablen gespeichert. Wenn der Wert der Längenvariablen größer als Null ist, sind ein oder mehrere Ereignisse aufgetreten.
Wir benutzen das Sig_int Signal (drücken Sie Strg+C), um aus dem Prozess zu beenden. Wenn Sie Strg+C drücken, die sig_handler () Die Funktion wird aufgerufen (siehe Signalhandling für Details). Diese Funktion entfernt den Watch -Deskriptor, schließt die Inotify -Instanz fd, und verlässt das Programm.
Abschluss
Sie können die API in Ihren eigenen Anwendungen zur Überwachung, Debuggierung, Automatisierung und mehr auf Ihre eigene Weise verwenden. Hier haben wir den Ausführungsfluss von Inotify API gesehen.