Questo articolo ti mostrerà come viene utilizzato inotify per monitorare la creazione, la cancellazione o la modifica di file e directory del file system Linux.
Per monitorare un file o una directory specifici tramite Inotify, seguire questi passaggi:
Ora vedremo le funzioni utilizzate per l'API inotify.
File di intestazione: sys/inotify.H
inotify_init () funzione :
Sintassi: int inotify_init (void)
Argomenti: nessun argomento.
Valori di ritorno: al successo, la funzione restituisce un nuovo descrittore di file, per fallimento la funzione restituisce -1.
inatify_add_watch () funzione:
Sintassi: int inotify_add_watch (int fd, const char *pathname, Uint32_t Mask)
Argomenti:
Questa funzione prende tre argomenti.
Il 1st Argomento (FD) è un descrittore di file che si riferisce all'istanza inotify (valore di ritorno di inotify_init () funzione) .
Il 2nd L'argomento è il percorso della directory o del file che viene monitorato.
Il 3Rd L'argomento è una maschera bit. La maschera bit rappresenta gli eventi che vengono osservati. Possiamo guardare uno o più eventi che usano bitwise o.
Valori di ritorno: Al successo, la funzione restituisce un descrittore di orologi, per fallimento la funzione restituisce -1.
inatify_rm_watch () funzione:
Sintassi: int inotify_rm_watch (int fd, int32_t wd)
Argomenti:
Questa funzione prende due argomenti.
Il 1st Argomento (FD) è un descrittore di file che si riferisce all'istanza inotify (valore di ritorno di inotify_init () funzione) .
Il 2nd Argomento (WD) è un descrittore di orologi (valore di ritorno di inatify_add_watch () funzione) .
Valori di ritorno: Al successo, la funzione restituisce 0, per errore la funzione restituisce -1.
Noi usiamo Leggere() funzione (dichiarata in unistd.H intestazione file) per leggere il buffer, che viene archiviato le informazioni degli eventi si sono verificati sotto forma di inotify_event struttura. IL inotify_event La struttura è dichiarata in sys/inotify.H File di intestazione:
struct inotify_eventIL inotify_event La struttura rappresenta un evento di file system restituito dal sistema inotify e contiene i seguenti membri:
Di seguito è riportato un esempio funzionante, utilizzando l'API inotify:
Inotificare.F del file:
#includereProduzione:
Per eseguire il programma e vedere l'output, dobbiamo prima aprire due terminali. Un terminale viene utilizzato per eseguire il programma Inotificare.C. Nel secondo terminal, andiamo sul percorso che viene osservata da Inotify.C. Se creiamo una directory o un file, modifichiamo qualsiasi file o eliminiamo qualsiasi directory o file, li vedremo nel primo terminale.
Nel Inotificare.C Esempio, il unistd.H Il file di intestazione viene utilizzato per il file Leggere() E vicino() funzione, il stdlib.H Il file di intestazione viene utilizzato per il file Uscita() funzione, il segnale.H Il file di intestazione viene utilizzato per il file segnale() funzione e Sig_int macro (vedere la gestione del segnale per i dettagli) e il fcntl.H Il file di intestazione viene utilizzato per il file fcntl () funzione.
Dichiariamo fd (inotificare istanza) e Wd (Watch Descriptor) come variabili globali in modo che queste variabili siano accessibili da tutte le funzioni.
IL fcntl () la funzione viene utilizzata in modo che quando leggiamo usando il fd descrittore, il thread non verrà bloccato.
Successivamente, aggiungiamo un orologio usando il inatify_add_watch () funzione. Qui, passiamo FD, il percorso della directory che sarà guardato e la maschera. Puoi passare la maschera degli eventi che si desidera monitorare utilizzando bit-o o.
Ora, leggi il buffer. Le informazioni su uno o più eventi sono archiviate nel buffer. È possibile elaborare tutti gli eventi uno per uno usando il loop. Puoi controllare l'evento-> maschera per sapere quale tipo di eventi sono accaduti.
Usiamo un infinito durante il ciclo per verificare continuamente quando si sono verificati eventi. Se non si sono verificati eventi, la funzione read () ritorna con uno 0. Il valore di ritorno della funzione read () è memorizzato nella variabile di lunghezza. Quando il valore della variabile di lunghezza è maggiore di zero, si sono verificati uno o più eventi.
Noi usiamo il Sig_int segnale (premere ctrl+c) per uscire dal processo. Quando si preme Ctrl+C, il sig_handler () La funzione è chiamata (vedere la gestione del segnale per i dettagli). Questa funzione rimuove il descrittore di orologi, chiude l'istanza inotify fd, ed esce dal programma.
Conclusione
È possibile utilizzare API inotify nelle tue applicazioni per monitoraggio, debug, automazione e altro ancora. Qui, abbiamo visto il flusso di esecuzione dell'API inotify.