Red Hat Training

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

A.2. 喚醒功能

許多應用程式會掃描配置檔,看有沒有變化。在許多情形下,這掃描會在固定的時間間隔下進行,例如每分鐘執行一次。這可能會造成問題,因為它會喚醒已經降速的硬碟。最好的方法是找到最適合的時間間隔、更好的檢查機制,或使用 inotify 來檢查變更並重新啟動事件。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 的詳情,請參閱 inotify 的 man page。