A.2. Wake-ups
Muitos aplicativos copiam arquivos de configuração para mudanças. Em diversos casos, o scan é realizado em intervalos fixos, por exemplo, a cada minuto. Isto pode ser um problema, pois força um disco a acordar de giros. A melhor solução é encontrar um bom intervalo, um bom mecanismo de verificação ou verificar mudanças com o inotify e reagir a eventos. O inotify pode verificar uam variedades de mudanças em um arquivo ou em um diretório.
Por exemplo:
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(); } ...
A vantagem desta saída é a variedade de verificações que você pode realizar.
A principal limitação é que somente um número limitado de relógios estão disponíveis no sistema. O número pode ser obtido através de
/proc/sys/fs/inotify/max_user_watches
e embora ele possa ser modificado, isto não é recomendado. Além disso, no caso de falhas do inotoify, o código precisa retornar à um método de verificação diferente, o qual geralmente significa muitas ocorrências de #if #define
no código fonte.
Para mais informações sobre o inotify, consulte a página man do inotify