A.2. Réveils
De nombreuses applications scannent les fichiers de configuration en cherchant des modifications. Dans de nombreux cas, le scan est effectué à intervalle fixe, toutes les minutes par exemple. Ceci peut poser problème, car le disque est forcé de se réveiller des arrêts de rotation. La meilleure solution est de trouver une bonne intervalle, un bon mécanisme de vérification, ou de vérifier les modifications avec inotify et de réagir aux événements. Inotify peut vérifier une variété des changements sur un fichier ou sur un répertoire.
Par exemple :
int fd; fd = inotify_init(); int wd; /* checking modification of a file - writing into */ wd = inotify_add_watch(fd, "./myConfig", IN_MODIFY); if (wd < 0) { inotify_cant_be_used(); switching_back_to_previous_checking(); } ... fd_set rdfs; struct timeval tv; int retval; FD_ZERO(&rdfs); FD_SET(0, &rdfs); tv.tv_sec = 5; value = select(1, &rdfs, NULL, NULL, &tv); if (value == -1) perror(select); else { do_some_stuff(); } ...
L'avantage de cette approche est la variété des vérifications que vous pouvez effectuer.
La limitation principale est que le nombre de suivis disponibles sur un système est limité. Ce nombre peut être obtenu sur
/proc/sys/fs/inotify/max_user_watches
et même s'il peut être changé, ceci n'est pas recommandé. De plus, au cas où inotify échouerait, le code devra utiliser une différente méthode de vérification, ce qui devrait signifier qu'il y aura de nombreuses occurrences de #if #define
dans le code source.
pour obtenir plus d'informations sur inotify, reportez-vous à la page man inotify.