W tym artykule pokaże Ci, w jaki sposób Inotify jest używany do śledzenia tworzenia, usunięcia lub modyfikacji plików i katalogów systemu plików Linux.
Aby monitorować określony plik lub katalog za pomocą inotify, wykonaj następujące kroki:
Teraz zobaczymy funkcje używane do INotify API.
Plik nagłówka: SYS/Inotify.H
inotify_init () funkcja:
Składnia: int inotify_init (void)
Argumenty: Brak argumentów.
Wartości zwracane: Po sukcesie funkcja zwraca nowy deskryptor pliku dla porażki, funkcja zwraca -1.
inotify_add_watch () funkcjonować:
Składnia: int inotify_add_watch (int fd, const char *Pathname, Uint32_T Mask)
Argumenty:
Ta funkcja przyjmuje trzy argumenty.
1St Argument (FD) to deskryptor pliku, który odnosi się do instancji INOTIFIF (wartość zwracania inotify_init () funkcjonować) .
2Nd Argument jest ścieżką monitorowanego katalogu lub pliku.
3r & D Argument to maska bitowa. Maska bitowa reprezentuje zdarzenia, które są oglądane. Możemy oglądać jedno lub więcej wydarzeń za pomocą Bitwise-or lub.
Zwracaj wartości: Po sukcesie funkcja zwraca deskryptor zegarków, dla awarii funkcja zwraca -1.
inotify_rm_watch () funkcjonować:
Składnia: int inotify_rm_watch (int fd, int32_t wd)
Argumenty:
Ta funkcja przyjmuje dwa argumenty.
1St Argument (FD) to deskryptor pliku, który odnosi się do instancji INOTIFIF (wartość zwracania inotify_init () funkcjonować) .
2Nd Argument (WD) jest deskryptorem zegarka (wartość zwracana inotify_add_watch () funkcjonować) .
Zwracaj wartości: Po sukcesie funkcja zwraca 0, dla niepowodzenia funkcja zwraca -1.
Używamy Czytać() funkcja (zadeklarowana w unistd.H nagłówek plik) w celu odczytania bufora, który jest przechowywany przez informacje o zdarzeniach wystąpiły w formie inotify_event Struktura. inotify_event Struktura jest zadeklarowana w SYS/Inotify.H plik nagłówka:
struct inotify_eventinotify_event Struktura reprezentuje zdarzenie systemu plików zwrócone przez system Inotify i zawiera następujące członki:
Poniżej znajduje się działający przykład, używając API INOTIFY:
Inotyfy.plik C:
#włączaćWyjście:
Aby wykonać program i zobaczyć dane wyjściowe, musimy najpierw otworzyć dwa terminale. Jeden terminal służy do uruchamiania programu Inotyfy.C. W drugim terminalu idziemy na ścieżkę obserwowaną przez Inotify.C. Jeśli utworzymy dowolny katalog lub plik, zmodyfikujesz dowolny plik lub usuniemy dowolny katalog lub plik, zobaczymy je na pierwszym terminalu.
w Inotyfy.C przykład unistd.H plik nagłówka jest używany dla Czytać() I zamknąć() funkcja, stdlib.H plik nagłówka jest używany dla Wyjście() funkcja, sygnał.H plik nagłówka jest używany dla sygnał() funkcja i Sig_int makro (szczegółowe informacje patrz obsługa sygnału) i fcntl.H plik nagłówka jest używany dla fcntl () funkcjonować.
Deklarujemy FD (InTify Instance) i wd (Obejrzyj deskryptor) jako zmienne globalne, aby te zmienne były dostępne ze wszystkich funkcji.
fcntl () funkcja jest używana tak, aby podczas czytania za pomocą FD deskryptor, wątek nie zostanie zablokowany.
Następnie dodajemy zegarek za pomocą inotify_add_watch () funkcjonować. Tutaj przekazujemy FD, ścieżkę katalogu, który będzie obserwowany, i maska. Możesz przekazać maskę zdarzeń, które chcesz monitorować za pomocą Bitwise-or lub.
Teraz przeczytaj bufor. Informacje o jednym lub więcej wydarzeniach są przechowywane w buforze. Możesz przetwarzać wszystkie zdarzenia jeden po drugim za pomocą pętli. Możesz sprawdzić zdarzenie-> maska, aby wiedzieć, jaki rodzaj wydarzeń się wydarzył.
Używamy nieskończoności podczas ciągłego sprawdzania, kiedy zdarzenia wystąpiły. Jeśli nie wydarzyły się żadne zdarzenia, funkcja Read () powraca z 0. Wartość zwracana funkcji Read () jest przechowywana w zmiennej długości. Gdy wartość zmiennej długości jest większa niż zero, wystąpiło jedno lub więcej zdarzeń.
Używamy Sig_int sygnał (naciśnij Ctrl+C), aby wyjść z procesu. Po naciśnięciu Ctrl+C, sig_handler () Funkcja jest wywoływana (szczegółowe informacje patrz Obsługa sygnału). Ta funkcja usuwa deskryptor zegarków, zamyka instancję Inotify FD, i wychodzi z programu.
Wniosek
Możesz użyć INOTIFY API we własnych aplikacjach do monitorowania, debugowania, automatyzacji i innych, na swój własny sposób. Tutaj widzieliśmy przepływ wykonywania API Inotify.