A.2. Пробуждения
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.