A.2. Despertadores
Muchas aplicaciones pueden examinar archivos de configuración para cambios. En algunos casos, el examen se realiza en un intervalo fijo, por ejemplo, cada minuto. Esto puede ser un problema, puesto que fuerza al disco a despertar de los spindowns. La mejor solución es hallar un buen intervalo, un buen mecanismo de verificación o revisar los cambios con inotify y reaccionar a eventos. Inotify puede verificar la variedad de cambios en un archivo o un directorio.
Por ejemplo:
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(); } ...
La ventaja de este enfoque es la variedad de verificaciones que se pueden realizar.
La principal limitante es que solo un número limitado de relojes está disponible en el sistema. El número puede obtenerse en
/proc/sys/fs/inotify/max_user_watches
y aunque se puede cambiar, no es recomendable. Además, si inotify falla, el código tiene que resguardarse a un método de verificación diferente, lo cual suele significar muchas apariciones de #if #define
en el código fuente.
Para obtener mayor información sobre inotify, consulte la página man inotify.