Denne artikkelen vil vise deg hvordan Inotify brukes til å spore opprettelsen, sletting eller modifisering av filer og kataloger i Linux -filsystemet.
Følg disse trinnene for å overvåke en spesifikk fil eller katalog ved hjelp av inotify:
Nå vil vi se funksjonene som brukes til Inotify API.
Headerfil: sys/inotify.h
inotify_init () funksjon:
Syntaks: int inotify_init (ugyldig)
Argumenter: Ingen argumenter.
Returverdier: Ved suksess returnerer funksjonen en ny filbeskrivelse, for å svikte funksjonen returnerer -1.
inotify_add_watch () funksjon:
Syntaks: int inotify_add_watch (int fd, const char *pathname, uint32_t mask)
Argumenter:
Denne funksjonen tar tre argumenter.
1st Argument (FD) er en filbeskrivelse som refererer til inotify -forekomsten (returverdi av inotify_init () funksjon) .
De 2nd Argument er banen til katalogen eller filen som overvåkes.
3Rd Argument er en bitmaske. Bitmasken representerer hendelsene som blir overvåket. Vi kan se en eller flere hendelser ved hjelp av bitvis-eller.
Returverdier: Ved suksess returnerer funksjonen en klokkebeskrivelse, for å svikte funksjonen returnerer -1.
inotify_rm_watch () funksjon:
Syntaks: int inotify_rm_watch (int fd, int32_t wd)
Argumenter:
Denne funksjonen tar to argumenter.
1st Argument (FD) er en filbeskrivelse som refererer til inotify -forekomsten (returverdi av inotify_init () funksjon) .
De 2nd Argument (WD) er en klokkebeskrivelse (returverdi av inotify_add_watch () funksjon) .
Returverdier: Ved suksess returnerer funksjonen 0, for å mislykkes funksjonen returnerer -1.
Vi bruker lese() funksjon (erklært i Unistd.h Overskrift fil) for å lese bufferen, som er lagret informasjonen om hendelsene skjedde i form av inotify_event struktur. De inotify_event struktur er erklært i sys/inotify.h headerfil:
struct inotify_eventDe inotify_event Struktur representerer en filsystemhendelse returnert av inotify -systemet og inneholder følgende medlemmer:
Nedenfor er et fungerende eksempel ved å bruke Inotify API:
Inotify.C -fil:
#inkludereProduksjon:
For å utføre programmet og se utdataene, må vi først åpne to terminaler. En terminal brukes til å kjøre programmet Inotify.c. I den andre terminalen går vi til banen som blir overvåket av Inotify.c. Hvis vi oppretter noen katalog eller fil, endrer en fil eller sletter noen katalog eller fil, vil vi se disse på den første terminalen.
I Inotify.c Eksempel, Unistd.h headerfil brukes til lese() og Lukk() funksjon, stdlib.h headerfil brukes til exit() funksjon, signal.h headerfil brukes til signal() funksjon og SIG_INT makro (se signalhåndtering for detaljer), og fcntl.h headerfil brukes til fcntl () funksjon.
Vi erklærer fd (inotify forekomst) og wd (Se beskrivende) som globale variabler slik at disse variablene er tilgjengelige fra alle funksjoner.
De fcntl () funksjon brukes slik at når vi leser ved hjelp av fd deskriptor, tråden blir ikke blokkert.
Deretter legger vi til en klokke ved hjelp av inotify_add_watch () funksjon. Her passerer vi FD, katalogens vei som vil bli sett på, og masken. Du kan passere masken til hendelsene du vil overvåke ved hjelp av bitvis-eller.
Les bufferen nå. Informasjon om en eller flere hendelser lagres i bufferen. Du kan behandle alle hendelser en etter en ved hjelp av loopen. Du kan sjekke hendelsen-> masken for å vite hvilken type hendelser som har skjedd.
Vi bruker en uendelig mens du er sløyfe for kontinuerlig å sjekke når hendelser skjedde. Hvis ingen hendelser har skjedd, returnerer leste () -funksjonen med en 0. Returverdien til lesing () -funksjonen lagres i lengdevariabelen. Når verdien av lengdevariabelen er større enn null, har en eller flere hendelser oppstått.
Vi bruker SIG_INT Signal (trykk CTRL+C) for å avslutte fra prosessen. Når du trykker på Ctrl+C, sig_handler () Funksjonen kalles (se signalhåndtering for detaljer). Denne funksjonen fjerner klokkebeskrivelsen, lukker inotify -forekomsten fd, og går ut av programmet.
Konklusjon
Du kan bruke Inotify API i dine egne applikasjoner for overvåking, feilsøking, automatisering og mer, på din egen måte. Her har vi sett utførelsesstrømmen av Inotify API.