Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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