Red Hat Training

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

A.2. Пробуждения

Многие приложения проверяют наличие изменений в файлах конфигурации с заранее определенной частотой (например, каждую минуту). Это приводит к пробуждению диска в случае его бездействия, поэтому рекомендуется откорректировать частоту проверки или использовать для этих целей подсистему inotify.
Например:
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();
}
...
Преимущество такого подхода состоит в возможности выполнения широкого диапазона проверок.
Недостатком является то, что число выполняемых проверок ограничено. Это число задано в файле /proc/sys/fs/inotify/max_user_watches и изменять его не рекомендуется. Следует также учесть, что в случае сбоя inotify необходимо обеспечить другой способ проверки, что обычно подразумевает включение в код множества секций #if #define.
Дальнейшую информацию можно найти на странице помощи inotify.