Cet article vous montrera comment Inotify est utilisé pour suivre la création, la suppression ou la modification des fichiers et répertoires du système de fichiers Linux.
Pour surveiller un fichier ou un répertoire spécifique en utilisant Inotify, suivez ces étapes:
Maintenant, nous verrons les fonctions qui sont utilisées pour inotifier l'API.
En tête de fichier: sys / inotify.H
inotify_init () fonction :
Syntaxe: int inotify_init (void)
Arguments: pas d'arguments.
Valeurs de retour: sur le succès, la fonction renvoie un nouveau descripteur de fichier, pour l'échec de la fonction renvoie -1.
inotify_add_watch () fonction:
Syntaxe: int inotify_add_watch (int fd, const char * pathname, uint32_t masque)
Arguments:
Cette fonction prend trois arguments.
Le 1St L'argument (FD) est un descripteur de fichiers qui se réfère à l'instance Inotify (valeur de retour de inotify_init () fonction) .
Les deuxnd L'argument est le chemin du répertoire ou du fichier qui est surveillé.
Le 3rd L'argument est un massacre. Le massask représente les événements qui sont surveillés. Nous pouvons regarder un ou plusieurs événements en utilisant.
Valeurs de retour: Au cours du succès, la fonction renvoie un descripteur de montre, pour l'échec de la fonction renvoie -1.
inotify_rm_watch () fonction:
Syntaxe: int inotify_rm_watch (int fd, int32_t wd)
Arguments:
Cette fonction prend deux arguments.
Le 1St L'argument (FD) est un descripteur de fichiers qui se réfère à l'instance Inotify (valeur de retour de inotify_init () fonction) .
Les deuxnd L'argument (wd) est un descripteur de montre (valeur de retour de inotify_add_watch () fonction) .
Valeurs de retour: Sur le succès, la fonction renvoie 0, pour l'échec la fonction renvoie -1.
Nous utilisons lire() fonction (déclaré dans unistd.H entête fichier) Pour lire le tampon, qui est stocké, les informations des événements se sont produites sous la forme du inotify_event structure. Le inotify_event la structure est déclarée dans sys / inotify.H En tête de fichier:
struct inotify_eventLe inotify_event La structure représente un événement de système de fichiers renvoyé par le système Inotify et contient les membres suivants:
Vous trouverez ci-dessous un exemple de travail, en utilisant l'API Inotify:
Inotifier.Fichier C:
#inclureSortir:
Pour exécuter le programme et voir la sortie, nous devons d'abord ouvrir deux terminaux. Un terminal est utilisé pour exécuter le programme Inotifier.c. Dans le deuxième terminal, nous allons sur le chemin qui est surveillé par l'inotifier.c. Si nous créons un répertoire ou un fichier, modifier un fichier ou supprimer un répertoire ou un fichier, nous les verrons sur le premier terminal.
Dans le Inotifier.c exemple, le unistd.H Le fichier d'en-tête est utilisé pour le lire() et fermer() fonction, le stdlib.H Le fichier d'en-tête est utilisé pour le sortie() fonction, le signal.H Le fichier d'en-tête est utilisé pour le signal() fonction et le Sig_int macro (voir la manipulation du signal pour plus de détails) et le fcntl.H Le fichier d'en-tête est utilisé pour le fcntl () fonction.
Nous déclarons FD (inotifier l'instance) et wd (regarder le descripteur) en tant que variables globales afin que ces variables soient accessibles à partir de toutes les fonctions.
Le fcntl () La fonction est utilisée de sorte que lorsque nous lisons en utilisant le FD Descripteur, le thread ne sera pas bloqué.
Ensuite, nous ajoutons une montre en utilisant le inotify_add_watch () fonction. Ici, nous passons FD, le chemin du répertoire qui sera surveillé et le masque. Vous pouvez transmettre le masque des événements que vous souhaitez surveiller.
Maintenant, lisez le tampon. Des informations sur un ou plusieurs événements sont stockées dans le tampon. Vous pouvez traiter tous les événements un par un en utilisant la boucle. Vous pouvez vérifier l'événement-> Masque pour savoir quel type d'événements s'est produit.
Nous utilisons une boucle infinie pour vérifier en continu lorsque les événements se sont produits. Si aucun événement n'a eu lieu, la fonction Read () revient avec un 0. La valeur de retour de la fonction read () est stockée dans la variable de longueur. Lorsque la valeur de la variable de longueur est supérieure à zéro, un ou plusieurs événements se sont produits.
Nous utilisons le Sig_int Signal (appuyez sur Ctrl + C) pour quitter le processus. Lorsque vous appuyez sur Ctrl + C, le sig_handler () La fonction est appelée (voir la manipulation du signal pour plus de détails). Cette fonction supprime le descripteur de montre, ferme l'instance inotify FD, et sort du programme.
Conclusion
Vous pouvez utiliser API inotify dans vos applications pour la surveillance, le débogage, l'automatisation, etc. Ici, nous avons vu le flux d'exécution de l'API inotifier.